首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >prolog dcg限制

prolog dcg限制
EN

Stack Overflow用户
提问于 2013-01-09 23:27:20
回答 1查看 395关注 0票数 6

我想使用DCGs作为发电机。到目前为止,语法是

代码语言:javascript
复制
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.之后,这个方法运行得很好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-09 23:47:16

非终结符a//0既是左递归的,也是'epsilon‘(生成空序列),并且phrase/2将在空结果之后立即循环。

你可以解决边界列表的长度问题:

代码语言:javascript
复制
?- between(1,4,Y),length(X,Y),phrase(a,X).

并且,正如您已经做过的,删除左递归。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14238644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档