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

day*_*day 4 prolog logic-programming

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

Cap*_*liC 5

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

OTOH,Ciao Prolog提供适当的扩展.

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

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