与标题状态一样,我试图从子谓词返回返回值的总和,但它不起作用。这是我的代码:
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]).
它只返回false
,它没有提供有关错误的信息。
答案 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.
第一个没有必要,空数列表的“数字”为零,因此,此规则还涵盖“添加两个空列表为零”