在 Prolog 中将谓词与未绑定变量进行比较是什么意思?
问问题
1011 次
2 回答
5
目标的结果X = f(X)
取决于 Prolog 的实现。在某些系统中,正如 Carlo 在他的回答中指出的那样,结果可以由用户可设置的标志控制。统一谓词 ,(=)/2
可以在有或没有所谓的发生检查的情况下实现。此检查验证一个操作数中的变量是否出现在另一个操作数的子项中。当统一谓词执行此检查时,目标X = f(X)
失败。但是,出于性能原因,统一谓词通常在没有此检查的情况下实现。ISO Prolog 标准指定了另一种统一谓词,恰当地命名为unify_with_occurs_check/2
,当诸如此类的目标可能导致麻烦时,可以使用该谓词。
如今,一些实现支持循环项,也称为有理项,由目标创建,例如X = f(X)
. 其中包括 CxProlog、ECLiPSe、SICStus Prolog、SWI-Prolog 和 YAP。但是请注意,对有理项的支持程度因系统而异。最小的支持将是(1)能够创建有理项(没有堆栈溢出!),(2)能够统一两个有理项,以及(3)能够打印包含有理项的查询绑定以一种明确的方式。使用这三个功能,您可以例如实现协推逻辑编程,这对几类问题很有用。
于 2015-04-17T22:03:30.710 回答