我的Elixir递归函数返回列表列表,而不是简单列表

Tho*_*wne 3 elixir

我正在学习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]?

Gaz*_*ler 5

你在这一行中有一个小错误:

 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)

  • 哦兄弟 - 傻小的语法错误.一切都有意义.顺便说一句,如果我可以加上我收到答案的速度(显然是愚蠢的)问题,这让我想起了我第一次学习Python时 - 在时尚之前 - 当社区真的很敏感时.Elixir非常兴奋! (3认同)