2010-10-21 26 views
0

如何将一个列表作为参数传递给一个函数并用一个数字标记每个元素?打破列表并用索引号标记每个元素

我遇到的问题是如何在erlang中增加,因为没有for循环。

谢谢

+0

有没有循环,但递归!所以,只需递归调用你的函数就可以增加var! – Tangui 2010-10-21 15:27:16

+0

实际上有循环。请参阅列表:foreach。 – nmichaels 2010-10-21 15:31:06

+0

我知道有递归。我在问如何将一个作为参数传递给函数的列表拆分并用一个数字标记每个元素? – jarryd 2010-10-21 15:31:06

回答

5

这是你想要做的吗?

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

因为如果是这样,你可以使用lists:mapfoldl

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

谢谢。这正是我想要做的。但不使用BIF。 – jarryd 2010-10-21 18:51:53

+0

1,BIF不危险,如果这是课程,请向你的主管咨询。第二个例子首先是错误的,其次是不必要的复杂。更容易的(正确的)解决方案是列表:zip(列表:seq(1,长度(列表)),列表)。 – 2010-10-22 13:45:30

+1

@Daniel Luna:第二个例子对我很好。它只遍历列表一次,而你的遍历它两次,再加上它也建立了一个丢弃数字列表。 – Zed 2010-10-23 10:06:24