2017-04-17 85 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 –