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]
。但是,这只会冻结我的终端。
答案 0 :(得分:3)
xs
和xs1
已经是第二个子句中的列表,但是您将它包装在另一个列表中,这会创建无限递归。改变:
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]