任何允许左递归的Prolog实现



我想知道是否有任何Prolog实现允许子句中的左递归。我的直觉是,如果实现使用宽度优先的目标搜索,它可能支持左递归。但我不太确定。请注意,我不太关心效率。

你的直觉是正确的,但是Prolog在设计上使用深度优先搜索(参见这里的SLDNF分辨率),并且有很好的理由,那么这个限制是不容易避免的。

OTOH, Ciao Prolog提供了合适的扩展。

您可以使用元解释器模拟广度优先递归,例如这里的左递归DCG(左递归语法是一种常见的情况),但这通常不是一种容易遵循的方法。

在我看来,最常见的扩展,可以近似/满足您的要求,是,你可以找到它在YAP Prolog, XSB, B-Prolog

最新更新