gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:28:13 24 4
gpt4 key购买 nike

我是 learning Elixir 并根据链接的书(第64页),具有以下功能:

defmodule MyList do
def square([]), do: []
def square([ head | tail ]), do: [ head*head, square(tail) ]
end

应该表现如下:
MyList.square [4, 5, 6]
[16, 25, 36]

但是当我将它插入我在 Ubuntu 上的 Elixir 1.2.0 安装时,我得到:
MyList.square [4, 5, 6]
[16, [25, [36, []]]]

这里发生了什么事?是我错了还是书错了?

我如何获得简单的 [16, 25, 36] ?

最佳答案

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

 def square([ head | tail ]), do: [ head*head, square(tail) ]

如果我们在每一步递归,那么输出是:
square([4, 5, 6])
[16, square([5, 6])]
[16, [25, square([6])]]
[16, [25, [36, square([])]]]
[16, [25, [36, []]]]

你要:
 def square([ head | tail ]), do: [ head*head | square(tail) ]

如果我们在每一步递归,那么输出是:
square([4, 5, 6])
[16 | square([5, 6])]
[16 | [25 | square([6])]]
[16 | [25 | [36 | square([])]]]
[16 | [25 | [36 | []]]]

在 iex 中尝试这个给出:
iex(3)> [16 | [25 | [36 | []]]]    
[16, 25, 36]

关于elixir - 我的 Elixir 递归函数返回一个列表列表,而不是一个简单的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com