我对二郎非常新,我只是从一本书中学习(programming erlang)。我在这些行中有一些疑问,这些行用作 for loop :
lib_misc.erl:
for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I)|for(I+1, Max, F)].
然后这样做:
1> lib_misc:for(1,10,fun(I) -> I end).
[1,2,3,4,5,6,7,8,9,10]
有人请告诉我这里发生了什么事吗?
答案 0 :(得分:3)
第一个子句for(Max, Max, F)
对前两个参数使用相同的变量名。因此,此子句仅在前两个参数相等时匹配。这也可以这样写:
for(I, Max, F) when I =:= Max -> ...
第二个子句调用提供的函数F
,然后在计数器增加的情况下对自身进行递归调用。最终,此调用将到达第一个子句,“循环”终止。
(但是,如果I
的值大于Max
,则此函数将永不终止,例如for(2, 1, fun integer_to_list/1)
。)