Erlang示例:创建了不正确的列表?

时间:2015-02-08 18:32:21

标签: list erlang

Erlang新手:我正在研究Joe Armstrong的书中的例子,并且我正在测试他的代码以获得" for循环。"我想我得到了一个不合适的名单,但我不确定为什么。以下(从第1版的书中)编译并加载就好了:

-module(lib_misc).
-export[for/3].

for(Max, Max, F) ->
    [F(Max)];
for(I, Max, F) ->
    [F(I)|for(I+1, Max, F)].

erl> lib_misc:for(1,10, fun(I) -> I end).

返回:

[1,2,3,4,5,6,7,8,9,10]

正如所料。但是,如果100代替10:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, 24,25,26,27,28 29 | ...]

这适用于所有数字> 29.是否有一个" automagic" (或用户可配置)限制列表的元素?如果此代码生成不正确的列表,为什么?提前谢谢。

注意:我正在运行"最新的" (17.3)在Windows,Debian和NixO上构建erlang,我得到了相同的结果......

1 个答案:

答案 0 :(得分:3)

一切都好。它只是shell中的表示问题。如果您测试结果length(lib_misc:for(1,10, fun(I) -> I end))的长度。你会发现它具有正确的价值。你也可以打印出来:

io:format("~p~n",[lib_misc:for(1,10, fun(I) -> I end)]).

这是一般性警告,shell会以“最佳”演示文稿显示结果。对于长列表或深层嵌套术语,它会产生一些“摘要”以避免潜在的数百页。