这个模块保持超时?

时间:2017-04-17 21:58:14

标签: recursion elixir

defmodule Maps do

def map([],[]) do [] end
def map([x|xs], [x1 | xs1])

 do  map([xs],[xs1]) ++ [(x + x1) | []]   end
end

我不知道它有什么问题。假设您运行Maps.map([1],[2])。然后它应该map(xs,xs1)并且由于xs = []xs1 = []为空,map ([],[])应该返回[],这将结束递归。然后 [] ++ [1+2] = [3]所以结果应该返回[3]。但是,这只会冻结我的终端。

1 个答案:

答案 0 :(得分:3)

xsxs1已经是第二个子句中的列表,但是您将它包装在另一个列表中,这会创建无限递归。改变:

map([xs],[xs1]) ++ [(x + x1) | []]

为:

map(xs, xs1) ++ [(x + x1) | []]

给出预期的输出:

iex(1)> Maps.map([1, 2, 3], [4, 5, 6])
[9, 7, 5]

旁注:[x | []][x]相同,因此您可以将其重写为:

map(xs, xs1) ++ [x + x1]