List Erlang练习,创建列表

List Erlang练习,创建列表,list,recursion,erlang,List,Recursion,Erlang,我正在学习Erlang并从书中做练习: 编写一个函数,返回格式为[1,2,…,N-1,N]的列表。 创建(3)->[1,2,3]。” 我有一个解决办法,那就是: create(N) -> create(1, N). create (M,M) -> [M]; create(M,N) -> [M | create(M+1, N)]. 我看了十几遍,但我就是不明白解决方案的第2行发生了什么。有人能解释一下吗? 多谢各位 编辑。 好的,所以我认为我理解它的方向是正确的。在第2行

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

编写一个函数,返回格式为[1,2,…,N-1,N]的列表。 创建(3)->[1,2,3]。”

我有一个解决办法,那就是:

create(N) ->   create(1, N).
create (M,M) ->  [M];
create(M,N) -> [M | create(M+1, N)].
我看了十几遍,但我就是不明白解决方案的第2行发生了什么。有人能解释一下吗? 多谢各位

编辑。 好的,所以我认为我理解它的方向是正确的。在第2行中,创建了一个新的列表,其中基本上1到头部,N到尾部?如果是,那么第3行M代表我们在第2行创建的新列表,N代表第1行的输入整数?再次感谢

create (M,M) ->  [M];
这仅仅意味着创建一个从M到M的列表,它只有一个数字M

比如说,

create (1,1) 

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

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

如果这两个数字是相同的create(3,3),那么它将通过递归函数返回[3]的列表,并从中构建一个列表

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