任何允许左递归的Prolog实现?

时间:2013-06-03 09:25:05

标签: prolog logic-programming

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

1 个答案:

答案 0 :(得分:5)

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

OTOH,Ciao Prolog提供了适当的extension

您可以使用元解释器模拟广度优先递归,就像左递归DCG(左递归语法是常见情况)所做的那样here,但通常不是一种简单易懂的方法。 / p>

IMO是可以近似/满足您的请求的最常见的扩展名, tabling ,您可以在YAP Prolog,XSB,B-Prolog中找到它。