我正在学习Elixir并根据链接的书(第64页),以下功能:
defmodule MyList do
def square([]), do: []
def square([ head | tail ]), do: [ head*head, square(tail) ]
end
Run Code Online (Sandbox Code Playgroud)
应该表现如下:
MyList.square [4, 5, 6]
[16, 25, 36]
Run Code Online (Sandbox Code Playgroud)
但当我在Ubuntu上插入我的Elixir 1.2.0安装时,我得到:
MyList.square [4, 5, 6]
[16, [25, [36, []]]]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么事?我错了还是这本书错了?
我如何进入简单的[16,25,36]?
你在这一行中有一个小错误:
def square([ head | tail ]), do: [ head*head, square(tail) ]
Run Code Online (Sandbox Code Playgroud)
如果我们在每一步递归,那么输出是:
square([4, 5, 6])
[16, square([5, 6])]
[16, [25, square([6])]]
[16, [25, [36, square([])]]]
[16, [25, [36, []]]]
Run Code Online (Sandbox Code Playgroud)
你要:
def square([ head | tail ]), do: [ head*head | square(tail) ]
Run Code Online (Sandbox Code Playgroud)
如果我们在每一步递归,那么输出是:
square([4, 5, 6])
[16 | square([5, 6])]
[16 | [25 | square([6])]]
[16 | [25 | [36 | square([])]]]
[16 | [25 | [36 | []]]]
Run Code Online (Sandbox Code Playgroud)
在iex中尝试这个给出:
iex(3)> [16 | [25 | [36 | []]]]
[16, 25, 36]
Run Code Online (Sandbox Code Playgroud)