在prolog中添加两个表示数字的列表

在prolog中添加两个表示数字的列表,prolog,Prolog,任务说:数字由列表表示(例如123=[1,2,3]),写一个谓词,将两个这样的数字相加。(例如,sum([4,5,6],[9],[4,6,5])) 我一直在思考如何递归地表达这一点,但让我感到困惑的是,数组的大小不同。看起来,如果数组被还原,这将很简单,因此HEAD实际上是最后一个元素。因为我的问题是我的总数看起来是这样的: [4, 5, 6] + [9] 而不是 [4, 5, 6] + [9] 写这种谓词的正确方法是什么?我需要一些帮助的指针或参考…以下是我的实

任务说:数字由列表表示(例如123=[1,2,3]),写一个谓词,将两个这样的数字相加。(例如,
sum([4,5,6],[9],[4,6,5])

我一直在思考如何递归地表达这一点,但让我感到困惑的是,数组的大小不同。看起来,如果数组被还原,这将很简单,因此HEAD实际上是最后一个元素。因为我的问题是我的总数看起来是这样的:

  [4, 5, 6]
+
  [9]
而不是

  [4, 5, 6]
+
        [9]

写这种谓词的正确方法是什么?我需要一些帮助的指针或参考…

以下是我的实现:

sum(L1,L2,OutL):-
         reverse(L1,List1),reverse(L2,List2),
         add_lists(List1,List2,0,List3),
         reverse(List3,OutL).

add_lists([],[],0,[]).
add_lists([],[],1,[1]).
add_lists([],[H|T],C,[H1|T]):-H1 is H+C.
add_lists([H|T],[],C,[H1|T]):-H1 is H+C.
add_lists([H|T],[H1|T1],C,[H2|T2]):-NH is H1+H,
                         (NH > 10 -> NC is 1,H2 is NH+C-10; H2 is NH+C,NC is 0),
                          add_lists(T,T1,NC,T2).
我们的想法是颠倒列表,以便添加正确的位置,避免您提到的问题。此外,如果加法大于10,则只需保留一个进位,即1,其中减少10

例如:

?- sum([4, 5, 6], [9], L).
L = [4, 6, 5] ;
false.