我认为我认为我对Prolog中的而不是谓词的声明性视图有点混淆。关于在Prolog中声明性解释非谓词的一些问题
我有我可以实现简单地以这种方式不断言:
not(P) :- P, !, fail;
true.
其中P是一个谓语,而不是P为FALSE如果P是真时真如果P是假的。
阅读的Bratko书我能读:
如果目标则成功不是(目标)失败,否则不(目标)成功
好吧,也许我在做多试图解释这段代码片段的问题,但似乎我超越了陈述范式和逻辑,进入某种程序范式
在我看来,这是一种形式如果{}否则{}实现由切口和失败作谓语......我这样阅读:
P是一个布尔谓词只能是:TRUE或FALSE
如果P为TRUE,那么强制失败(所以不是(P)就是FALSE)并且避免回溯而没有其他响应。
ELSE P为FALSE而不是P为TRUE。
我不知道如果我的解释是错误的,如果我缺少的推理,或者如果我在做与愚氓问题太大的问题的东西...
既然你问了[昨天一个非常类似的问题](http://stackoverflow.com/q/15883938/487781),你接受了一个答案,或许是时候停下来,并理解你的理解。您对** not/1 **或** \ +/1 **(ISO)metapredicates的“程序性”解释似乎是正确的和不常见的。你引用Bratko的话。是的,它可以作为if-then-else编程的一种形式。有一个原因是否定 - 作为失败被执行,而不是试图提供一个纯粹的逻辑否定语义。请缩小你真正想要的答案。 – hardmath 2013-04-09 16:41:03
@hardmath:我已经尝试了几次,但他忽略了它。有时候我会举报,但这是无望的。 – false 2013-04-09 18:27:15
我们可以以完全重复的方式关闭。 – 2013-04-09 18:30:09