我正在学习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行的输入整数?再次感谢。
答案 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]