我正在尝试用prolog写一些dcg语法,它将描述
a^nb^n n>=0
"",ab,aabb,aaabbb itd
我所写的都是
s --> slowo.
slowo --> [a],slowo,[b],!.
slowo --> []. 只要我想做的就是检查单词是否正确,这是很好的,但是?-phrase(s,X)的dcg语法应该如何从我的语言生成所有的单词?
发布于 2012-03-26 06:37:05
如果你从Prolog开始,尽量避免使用!/0。没有它,你通常可以做得更好。
例如,你的语法可以写成:
s --> [].
s --> [a], s, [b].查询如下:
?- phrase(s, X).请注意,prolog子句是从左到右和从上到下挑选的,所以当涉及回溯时,在另一个规则的顶部编写的规则将优先考虑。
发布于 2012-03-26 06:30:03
在SWI Prolog中,我可以使用:
s(X, []).或
phrase(s, X).(如您所建议的)来获取所有字符串。然而,为了在没有堆栈溢出的情况下生成任何答案,我需要颠倒slowo的两个规则的顺序,并从递归规则中删除cut。
https://stackoverflow.com/questions/9864586
复制相似问题