1

我正在学习 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 行发生了什么。请有人解释一下吗?谢谢你。

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

4

2 回答 2

2

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

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

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

于 2013-09-22T22:48:10.980 回答
1
create (M,M) ->  [M];

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

例如,

create (1,1) 

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

于 2013-09-22T22:48:02.887 回答