请帮帮我! 我需要找到两个不同长度列表的元素总和。 它应该看起来像:
?-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.
所以我遇到了一些不同长度的麻烦。我不知道怎么做。 谢谢你的帮助!丹娘。
答案 0 :(得分:3)
在可能的情况下,我更喜欢较短的确定性代码:
p([X|Xs], [Y|Ys], [Z|Zs]) :-
Z is X + Y,
!, p(Xs, Ys, Zs).
p([], Ys, Ys) :- !.
p(Xs, [], Xs).
答案 1 :(得分: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。每当有一个列表为空时,它会将它们“前置”到L而不添加它。当两者都为空时,递归停止。