2013-05-26 103 views
1

請幫幫我! 我需要找到兩個不同長度列表的元素的總和。 它應該看起來像:Prolog。兩個不同長度列表的元素總和

?-p([1,2,3],[1,2,3,9],L),write(L),nl. 
L = [2,4,6,9]. 

p([],_,[]). 
p(_,[],[]). 
p([H1|T1],[H2|T2],[H|T]):-H is H1 + H2,p(T1,T2,T). 
?-p([1,2,3],[1,2,3],L),write(L),nl. 

所以我有一些麻煩與不同長度的列表。我不知道該怎麼做。 感謝您的幫助!蔡健雅。

回答

1

這應該工作:

p([], [], []). 
    p([], [H2|T2], [L|Ls]) :- 
     L = H2, 
     p([], T2, Ls). 
    p([H1|T1], [], [L|Ls]) :- 
     L = H1, 
     p(T1, [], Ls). 
    p([H1|T1], [H2|T2], [L|Ls]) :- 
     L is H1 + H2, 
     p(T1, T2, Ls). 

說明: 只要有兩個列表中的元素,他們得到補充和「前面加上」到L.每當有1名列表爲空,它只會'prepend'到L而不添加它。當兩者都爲空時,遞歸性停止。

+0

謝謝你非常非常多! – Tanya

3

我更喜歡短的,確定性的代碼,如果可能的話:

p([X|Xs], [Y|Ys], [Z|Zs]) :- 
    Z is X + Y, 
    !, p(Xs, Ys, Zs). 
p([], Ys, Ys) :- !. 
p(Xs, [], Xs). 
相關問題