2009-12-17 5 views
4

Est-il possible d'utiliser la compréhension de liste sur deux listes, article par article, en séquence? Étant donné A = [1,2,3], B = [4,5,6], obtenez C = [f(1, 4), f(2, 5), f(3, 6)]. En d'autres termes, une façon plus directe/efficace de faire [f(U, V) || {U, V} = lists:zip(A, B)].Erlang liste de compréhension avec deux listes en séquence?

La question similaire va aux binaires, si donné A = <<1,2,3>> et B = <<4,5,6>>. Cela serait très utile si vous deviez xor deux binaires, par exemple.

Répondre

8

Ce n'est pas possible actuellement. Il a déjà été proposé dans EEP12 et EEP19.

Votre meilleur choix est d'implémenter votre propre fonction récursive pour cela.

1

Il existe déjà une fonction d'ordre supérieur dans le module lists pour cela et elle s'appelle lists:zipwith/3. Votre exemple de scénario serait implémenté de la manière suivante:

lists:zipwith(fun f/2, A, B). 
+0

Oui, il existe des fonctions permettant de compresser deux ou trois listes. Mais il n'y a pas de solution générale pour N listes, comme une compréhension de liste serait. – Zed

Questions connexes