【发布时间】:2015-11-06 15:52:08
【问题描述】:
我正在使用 Prolog 在我的项目中编码一些相当复杂的规则。有很多递归,包括相互递归。部分规则如下所示:
pred1(X) :- ...
pred1(X) :- someguard(X), pred2(X).
pred2(X) :- ...
pred2(X) :- othercondition(X), pred1(X).
pred1 和pred2 之间存在相当明显的无限循环。不幸的是,这些谓词之间的交互非常复杂且难以隔离。我可以通过传递已传递给pred1 的对象列表来消除此实例中的无限循环,但这非常笨拙!事实上,它在很大程度上违背了在这个应用程序中使用 Prolog 的目的。
如何让 Prolog 避免无限循环?例如,如果在证明pred1(foo) 的过程中,它试图将pred1(foo) 证明为子目标,则失败并回溯。
meta-interpreters 可以做到这一点吗?
【问题讨论】:
标签: prolog prolog-metainterpreter