在Erlang中创建列表

Sup*_*ock 5 erlang reverse list

来自Cesarini的"Erlang编程"练习3-2

当我通过"Erlang编程"时,我得到了奇怪的列表创建问题.从练习3-2开始,我写了两个类似的功能.

create( 0 ) -> [];
create( N ) when N > 0 -> [ N | create( N-1 ) ].

reverse_create( 0 ) -> [];
reverse_create( N ) when N > 0 -> [ reverse_create( N-1 ) | N ].
Run Code Online (Sandbox Code Playgroud)

所以create(3)就像我期望的那样生成.

exercise3:创建(3).
[3,2,1]

但是reverse_create不会生成我期望的列表.

exercise3:reverse_create(3).
[[[[] | 1] | 2] | 3]

我需要更改什么才能使reverse_create(3)返回[1,2,3]?谢谢你的解释.

Cha*_*tni 5

reverse_create返回一个列表,并使用它作为head元素来创建导致嵌套列表的列表.尝试此解决方案:

reverse_create( 0 ) -> [];
reverse_create( N ) when N > 0 -> reverse_create( N-1 ) ++ [N].
Run Code Online (Sandbox Code Playgroud)

编辑:一个更好的实现将是:

reverse_create2(N) -> reverse_create_helper(N, []).

reverse_create_helper(0, Acc) ->
    Acc;
reverse_create_helper(N, Acc) ->
    reverse_create_helper(N-1, [N|Acc]).
Run Code Online (Sandbox Code Playgroud)