2016-03-26 62 views
1

我想学习如何在prolog中编写生产规则。 这就是我所拥有的。Prolog语法产生

paragraph --> sentence, paragraph ; []. 
sentence --> proper_noun, [ ], verb, [ ], preposition, [ ], article, [ ], noun, period. 
proper_noun --> [Jimmy] ; [Yancy] ; [Clementine] ; [Astrid]. 
verb --> [runs] ; [walks] ; [skips] ; [flies]. 
preposition --> [to] ; [at] ; [around] ; [through]. 
article --> [the] ; [a]. 
noun --> [school] ; [house] ; [car] ; [spaceship]. 
period -->[.]. 

我尝试使用

phrase(sentence, [Jimmy," ",walks," ",to," ",the," ",school], []), atom_codes(Output,[Jimmy," ",walks," ",to," ",the," ",school]). 

它返回为输出调用它。请帮助我了解我出错的地方以及如何编写更好的语法。

回答

1

使用'Jimmy'等(即将所有以大写字母开头的原子放入引号中)。否则,它们被解释为逻辑变量。你确实会得到很多“单变量变量”警告。

你也错过了一些括号,并提出了几个错别字:

paragraph --> sentence, (paragraph ; []). 
sentence --> proper_noun, verb, preposition, article, noun, period. 
proper_noun --> ['Jimmy'] ; ['Yancy'] ; ['Clementine'] ; ['Astrid']. 
verb --> [runs] ; [walks] ; [skips] ; [flies]. 
preposition --> [to] ; [at] ; [around] ; [through]. 
article --> [the] ; [a]. 
noun --> [school] ; [house] ; [car] ; [spaceship]. 
period -->[.]. 

测试它:

30 ?- phrase(sentence, ['Jimmy', walks, to, the, school, .], []). 
true ; 
false. 
+0

嘿。如果你不介意我问括号如何帮助?在句子生产中,我也想包含空格。我会怎么做?我可以使用'|'代替 ';' – InquisitiveCoder

+1

@ BryanD'silva:是的,括号允许使用不错的快捷方式,内联替代方案。考虑正确的递归段落// 0的优雅程度。有关空间处理,请参阅库(dcg/basics)。你可以使用|代替 ; – CapelliC

+0

@CapelliC感谢您加入。:) –