没有在prolog中实现

时间:2018-03-18 21:07:24

标签: prolog

我的老师给了我以下规则,用于在prolog中实现逻辑not

not( X ) :- X, !, fail.
not( _ ).

我很难理解它。我有点认为!意味着削减,但我对这种情况下的工作原理以及第二行试图实现的目标感到困惑。有人可以帮我理解吗?

1 个答案:

答案 0 :(得分:2)

实施非常简单:

  • 规则:not( X ) :- X, !, fail.州调用X查看是否成功,如果X成功,则not(X)失败,因此会调用fail结束但在此之前你必须告诉 Prolog 不检查第二条规则(这会成功)这就是它放置切割(!)的原因。

  • 规则:not( _ ).符合上述规则X失败的情况,因此上述规则失败,Prolog会尝试通过回溯来匹配其他规则。< / p>

虽然重要的是要认识到 Prolog没有逻辑否定但是否定为失败 这有点不同。您可以查看我之前的问题Logical Negation in Prolog,看看是否存在一些差异,并了解为什么让逻辑否定这么困难(也许是不可能的)。

你也可以谷歌关于否定作为失败更好地理解它。可以找到解释它的简单链接(并且还指出逻辑否定的主要区别)here