Erlang练习,创建列表

时间:2013-09-22 22:43:08

标签: list recursion erlang

我正在学习Erlang并从书中做练习:

“编写一个返回格式列表[1,2,..,N-1,N]的函数。 create(3) - > [1,2,3]“。

我有一个解决方案,即:

create(N) ->   create(1, N).
create (M,M) ->  [M];
create(M,N) -> [M | create(M+1, N)].

我经历了十几次,但我根本无法理解解决方案第2行发生了什么。可以请有人解释一下吗? 谢谢。

EDIT。 好吧,所以我认为我正在理解它的正确轨道。在第2行中,创建了新列表,其中基本上1将转到Head,N转到尾部?如果是,那么在第3行,M代表我们在第2行创建的新列表,N代表第1行的输入整数?再次感谢。

2 个答案:

答案 0 :(得分:1)

create (M,M) ->  [M];

这仅仅意味着创建一个从M到M的列表,它只有一个数字,M。

例如,

create (1,1) 

会给你[1],因为列表从1开始,到1结束。

答案 1 :(得分:1)

解决方案的第2行只是递归函数的基本情况。

如果两个数字相同,则创建(3,3),然后它将通过递归函数返回[3]的列表并构建一个列表。

创建(3) - >创建(1,3) - > [1 |创建(2,3)] - > [2,|创建(3,3)] - > [3] - > [2 | [3]] - > [1 | [2,3]] - > [1,2,3]