2016-03-26 61 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感謝您加入。:) –