我认为我认为我对Prolog 中非谓词的声明性观点有些混淆。
我有我可以通过这种方式简单地实现非谓词:
not(P) :- P, !, fail;
true.
其中 P 它是一个谓词,如果 P 它是 TRUE,则 P 是 FALSE,如果 P 它是 false,则 P 是 TRUE。
阅读 Bratko 的书,我可以阅读:
如果 Goal 成功,则 not(Goal) 失败,否则 not(Goal) 成功
好吧,也许我在试图解释这个代码片段时遇到了很多问题,但似乎我认为这超出了声明性范式和逻辑,并进入了某种程序范式
在我看来,这是if{} else{}的一种形式,由 cut 和 fail 谓词谓词实现......我是这样读的:
P 是一个布尔谓词,只能是:TRUE 或 FALSE
如果 P 为 TRUE,则强制失败(因此 not(P) 为 FALSE)并避免回溯以没有其他响应。
ELSE P 是 FALSE 而不是 P 是 TRUE。
我不知道我的解释是否错误,我是否在推理中遗漏了什么,或者我是否对愚蠢的问题做了很多问题......