首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog dcg从语言生成所有单词

Prolog dcg从语言生成所有单词
EN

Stack Overflow用户
提问于 2012-03-26 06:16:28
回答 2查看 1.1K关注 0票数 1

我正在尝试用prolog写一些dcg语法,它将描述

a^nb^n n>=0

"",ab,aabb,aaabbb itd

我所写的都是

代码语言:javascript
复制
s --> slowo.
slowo --> [a],slowo,[b],!.
slowo --> [].  

只要我想做的就是检查单词是否正确,这是很好的,但是?-phrase(s,X)的dcg语法应该如何从我的语言生成所有的单词?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-26 06:37:05

如果你从Prolog开始,尽量避免使用!/0。没有它,你通常可以做得更好。

例如,你的语法可以写成:

代码语言:javascript
复制
s --> [].
s --> [a], s, [b].

查询如下:

代码语言:javascript
复制
?- phrase(s, X).

请注意,prolog子句是从左到右和从上到下挑选的,所以当涉及回溯时,在另一个规则的顶部编写的规则将优先考虑。

票数 3
EN

Stack Overflow用户

发布于 2012-03-26 06:30:03

在SWI Prolog中,我可以使用:

代码语言:javascript
复制
s(X, []).

代码语言:javascript
复制
phrase(s, X).

(如您所建议的)来获取所有字符串。然而,为了在没有堆栈溢出的情况下生成任何答案,我需要颠倒slowo的两个规则的顺序,并从递归规则中删除cut。

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

https://stackoverflow.com/questions/9864586

复制
相关文章

相似问题

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