谓词打印出 "Unexpected" false
Predicate Prints Out "Unexpected" false
我正在尝试编写谓词 likes/2
,其运行方式如下:
?- likes(A,alan).
A = lindsay ;
A = chloe ;
A = cheyanne ;
A = britney ;
以下是我解决问题的方法:
% Define your facts:
combo(lindsay,alan).
combo(chloe,alan).
combo(cheyanne,alan).
combo(britney,alan).
% Define your predicate:
likes(A,B) :- combo(A,B); combo(B,A).
现在,我面临的问题是,虽然我的程序按预期运行,但在大多数情况下,它最后会打印出错误,我不明白为什么。这是完整的输出:
?- likes(A,alan).
A = lindsay ;
A = chloe ;
A = cheyanne ;
A = britney ;
false.
简答。 Prolog 顶级解释器并不总是能够检测到没有更多的查询证明。因此,在您的情况下,在给出解决方案 A = britney
之后,它会询问您是否需要另一个解决方案。
在 likes(A,alan)
查询的特定情况下,谓词的单个子句意味着推理引擎试图证明 combo(A,alan); combo(alan,A)
。此分离中的左目标为您提供了四种解决方案。但是正确的解决方案也可能提供一个或多个解决方案,但引擎只能通过尝试目标来解决这个问题,但失败了,因为 combo/2
的子句中的 none 具有原子 alan
作为第一个参数。未能证明正确的目标给了你 false
打印。
我正在尝试编写谓词 likes/2
,其运行方式如下:
?- likes(A,alan).
A = lindsay ;
A = chloe ;
A = cheyanne ;
A = britney ;
以下是我解决问题的方法:
% Define your facts:
combo(lindsay,alan).
combo(chloe,alan).
combo(cheyanne,alan).
combo(britney,alan).
% Define your predicate:
likes(A,B) :- combo(A,B); combo(B,A).
现在,我面临的问题是,虽然我的程序按预期运行,但在大多数情况下,它最后会打印出错误,我不明白为什么。这是完整的输出:
?- likes(A,alan).
A = lindsay ;
A = chloe ;
A = cheyanne ;
A = britney ;
false.
简答。 Prolog 顶级解释器并不总是能够检测到没有更多的查询证明。因此,在您的情况下,在给出解决方案 A = britney
之后,它会询问您是否需要另一个解决方案。
在 likes(A,alan)
查询的特定情况下,谓词的单个子句意味着推理引擎试图证明 combo(A,alan); combo(alan,A)
。此分离中的左目标为您提供了四种解决方案。但是正确的解决方案也可能提供一个或多个解决方案,但引擎只能通过尝试目标来解决这个问题,但失败了,因为 combo/2
的子句中的 none 具有原子 alan
作为第一个参数。未能证明正确的目标给了你 false
打印。