我想使用DCGs作为发电机。到目前为止,语法是
s-->a,b.
a-->[].
a-->a,c.
c-->[t1].
c-->[t2].
b-->[t3].
b-->[t4].我想生成a长度为< someNumber的所有s。
使用?- phrase(a,X),length(X,Y),Y<4.,我可以获得少于4个项目的所有a。然而,当所有组合都耗尽时,系统(SWI-Prolog 6.2.5)似乎停止了。有时,一个类似的问题是asked here。然而,作为Prolog的新手,我不能用上面的语法让它工作。有什么想法吗?
更新:有一条来自(canrememberthename)的评论不知何故被删除了。无论如何,建议使用between(1,4,Y),length(X,Y),phrase(a,X).来设置限制。在将我的代码更改为a-->c,a.之后,这个方法运行得很好
发布于 2013-01-09 23:47:16
非终结符a//0既是左递归的,也是'epsilon‘(生成空序列),并且phrase/2将在空结果之后立即循环。
你可以解决边界列表的长度问题:
?- between(1,4,Y),length(X,Y),phrase(a,X).并且,正如您已经做过的,删除左递归。
https://stackoverflow.com/questions/14238644
复制相似问题