2017-04-17 71 views
0
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]。但是,这只会冻结我的终端。该模块保持超时?

回答

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] 
+0

Thanks that wor KS –