序言谓词的总和不起作用

Summation of prolog predicates not working

如标题所述,我正在尝试 return 来自子谓词的 returned 值的总和,但它不起作用。这是我的代码:

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 = 3555(如 3555 is 3333 + 222),但我得到的是 false

我也试过:

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

它只是 returns false,没有给出任何信息是错误的。

问题在于这些规则:

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

第二个是,"addition of two list is the addition of the integer conversion of these list":

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

第一个不是必需的,"digits" 对于空列表是零,因此,此规则也涵盖 "addition of two empty list is zero"