List 序言。两个不同长度列表的元素之和

List 序言。两个不同长度列表的元素之和,list,prolog,sum,element,List,Prolog,Sum,Element,请帮帮我! 我需要找到两个不同长度列表的元素之和。 它应该是这样的: ?-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. 所以我对不同长度的列表有一些问题。我不知道怎么做。 谢谢你的帮助!Tanya.这应该可以:

请帮帮我! 我需要找到两个不同长度列表的元素之和。 它应该是这样的:

?-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.
所以我对不同长度的列表有一些问题。我不知道怎么做。 谢谢你的帮助!Tanya.

这应该可以:

    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中。每当有1个列表为空时,它只会将它们“预先添加”到L中,而不添加它。当两者都为空时,递归性停止。

这应该可以工作:

    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中。每当有1个列表为空时,它只会将它们“预先添加”到L中,而不添加它。当两者都为空时,递归性停止。

我更喜欢较短的确定性代码,如果可能的话:

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

在可能的情况下,我更喜欢较短的确定性代码:

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