2017-04-17 3 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はすでに第2節にリストされていますが、あなたは無限再帰を作成している別のリストにこれをラップしています。変更:

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

ありがとうございましたKS –