2010-10-21 3 views
0

Comment diviser une liste qui est passée en argument à une fonction et marquer chaque élément avec un nombre?Rupture d'une liste et marquage de chaque élément avec un numéro d'index

Le problème que j'ai est de savoir comment incrémenter en erlang car il n'y a pas de boucles for.

Merci

+0

Il n'y a pas de boucles, mais il est récursion! Donc, il suffit d'incrémenter votre var en appelant récursivement votre fonction! – Tangui

+0

Il existe en fait des boucles. Voir les listes: foreach. – nmichaels

+0

Je sais qu'il y a récursivité. Je demande comment on peut diviser une liste qui est passée en argument à une fonction et marquer chaque élément avec un nombre? – jarryd

Répondre

5

Est-ce que vous essayez de le faire?

tagger(List) -> 
    tagger(List, 0). 
tagger([Head|Tail], Index) -> 
    [{Head, Index}|tagger(Tail, Index + 1)]; 
tagger([], _Index) -> 
    []. 

Parce que si elle est, vous pouvez utiliser lists:mapfoldl:

lists:mapfoldl(fun (A, AccIn) -> {{A, AccIn}, AccIn + 1} end, 0, List). 
+0

Merci. c'est ce que j'essayais de faire. Mais n'utilisant pas les BIF. – jarryd

+0

1ère, BIFs ne sont pas dangereux, et si c'est le cours, s'il vous plaît demandez à votre superviseur. 2ème l'exemple ci-dessus est tout d'abord faux et d'autre part inutilement compliqué. Une solution plus simple (correcte) est les listes: zip (lists: seq (1, length (List)), List). –

+1

@Daniel Luna: Le deuxième exemple me semble bien. Il ne traverse la liste qu'une seule fois, alors que le vôtre la parcourt deux fois, et construit également une liste de numéros à jeter. – Zed

Questions connexes