prolog谓词不起作用的总和

时间:2015-09-05 04:54:26

标签: prolog

与标题状态一样,我试图从子谓词返回返回值的总和,但它不起作用。这是我的代码:

addlistnum([],[],X).
addlistnum(digits(Y,[A|T]),digits(F,[B|T]),X) :-
   X is Y + F.

digits(Num, List) :-
   digits(0, List, Num).

digits(Num, [], Num).
digits(N, [A|As], Num) :-
   N1 is N * 10 + A,
   digits(N1, As, Num).

子谓词工作正常。它将列表转换为整数。现在我想总结转换后的值。 示例:

?- digits(X,[3,3,3]).
X = 333.                % works as expected

在此基础上,addlistnum([3,3,3,3],[2,2,2],X)应该生成X = 35553555 is 3333 + 222),但我得到false

我也尝试过:

addlistnum([],[],X).
addlistnum([A|T],[B|T],X) :-
   X is Y + F,
   digits(Y,[A|T]), 
   digits(F,[B|T]).

它只返回false,它没有提供有关错误的信息。

1 个答案:

答案 0 :(得分:3)

问题出在这些规则上:

addlistnum([],[],X).
addlistnum(digits(Y,[A|T]),digits(F,[B|T]),X) :-
   X is Y + F.

第二个是,“添加两个列表是添加这些列表的整数转换”:

addlistnum(A,B,X) :-
   digits(NA,A),
   digits(NB,B),
   X is NA + NB.

第一个没有必要,空数列表的“数字”为零,因此,此规则还涵盖“添加两个空列表为零”