序言谓词的总和不起作用
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"
如标题所述,我正在尝试 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"