Findall /3返回一个空列表而不是解决方案



我使用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).

由于使用了否定,调用GeneratorTest所产生的绑定都不会返回。

相关内容

  • 没有找到相关文章

最新更新