有允许左递归的Prolog实现吗?

有允许左递归的Prolog实现吗?,prolog,logic-programming,Prolog,Logic Programming,我想知道是否有任何Prolog实现允许子句中的左递归。我的直觉是,如果实现使用广度优先的目标搜索,它可能支持左递归。但我不太确定。请注意,我不太关心效率。您的直觉是正确的,但是Prolog使用了设计的深度优先搜索(请参见SLDNF分辨率),并且有充分的理由,那么这种限制是不容易避免的 OTOH,Ciao序言提供了一个适当的 您可以使用元解释器模拟广度优先递归,例如左递归DCG(左递归语法是一种常见的情况),但这通常不是一种简单的方法 在我看来,最常见的能够近似/满足您的请求的扩展是tabling

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

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

OTOH,Ciao序言提供了一个适当的

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


在我看来,最常见的能够近似/满足您的请求的扩展是tabling,您可以在YAP-Prolog、XSB、B-Prolog中找到它。

或使用迭代深化。嗯,你说你不在乎效率…:)谢谢你的建议,威尔。迭代深化实际上效果更好。我尝试了Ciao的BF扩展,举了一个小例子,Get stackoverflow(没有双关语;)。在这里,链接到表格上的一些资料将非常有用。:)