我使用GNU Prolog来解决一个问题。我定义了以下谓词:
% P is the product of X and Y
produit(X,Y,P) :-
between(2,200,X),
between(2,200,Y),
X #<# Y,
X*Y #=# P.
% S is the sum of X and Y
somme(X,Y,S) :-
between(2,200,X),
between(2,200,Y),
X #<# Y,
X+Y #=# S.
%je ne peux pas deviner
clue_one(X,Y) :-
produit(X,Y,P),
XX*YY #=# P,
XX #=# X,
XX #=# 1,
YY #=# 1,
XX #=# Y.
%je le savais
clue_two(S) :-
forall(somme(X,Y,S), clue_one(X,Y)).
Prolog说clue_two(17)
是真的,但当我尝试findall(S, clue_two(S), L)
时,GNU Prolog返回空列表。为什么?
forall/2
事实上的标准谓词等价于:
forall(Generator, Test) :-
+ (Generator, + Test).
由于使用了否定,调用Generator
或Test
所产生的绑定都不会返回。