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

Erlang example: improper list created?

Erlang 新手:我正在研究 Joe Armstrong 书中的示例,我正在测试他的代码以获得 "for loop." 我认为我得到了一个不正确的列表,但我不确定为什么.以下内容(来自本书的第 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).

returns:

[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"(或用户可配置的)限制?如果此代码生成不正确的列表,为什么?提前致谢。

注意:我是 运行 "latest" (17.3) 在 Windows、Debian 和 NixOs 上构建的 erlang,我得到了相同的结果...

一切正常。这只是 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 会在 "best" 演示文稿中向您显示结果。对于长列表或深层嵌套的术语,它会 "summary" 避免潜在的数百页。