2013-12-10 34 views
0

在解析字符串列表時,當前規則允許逗號位於句子的末尾,並且不允許逗號在單詞之間,這顯然是不正確的。如何修改當前規則?如何修改Prolog中的句子分析規則?

complexsentence --> [] ; simplesentence, complexsentence; 
        simplesentence, delimiter, complexsentence. 
simplesentence --> noun, verb. 
delimiter --> [,]. 
noun --> [sun]. 
verb --> [shines]. 
% TEST: phrase(complexsentence, [sun,shines]). %must be TRUE 
% TEST: phrase(complexsentence, [sun,',',shines]). %must be TRUE 
% TEST: phrase(complexsentence, [sun,shines,',']). %must be FALSE 

更新: 試圖解決它像這樣。它的工作原理

complexsentence --> [] ; simplesentence,complexsentence. 
simplesentence --> noun,verb; 
      noun,verb,delimiter,noun; 
      noun,verb,delimiter,noun,verb. 
delimiter -->[,]. 
noun-->[sun]. 
verb-->[shines]. 
% TEST: phrase(complexsentence, [sun,shines]). % TRUE 
% TEST: phrase(complexsentence, [sun,',',shines]). % FALSE 
% TEST: phrase(complexsentence, [sun,shines,',']). %FALSE 
+0

爲什麼第二種情況是「必須爲真」嗎?爲什麼'[]'是一個有效的'complexsentence'? – lurker

+0

他需要這個來獲得解決方案,但它會更直觀(我認爲)說'simplesentence'而不是' ]'。 –

+0

個@DanielLyons是的,這就是我在想'complexsentence - > simplesentence.'都會比'complexsentence更多的意義 - > [] .' – lurker

回答

3

建議改變DCG:

complexsentence --> simplesentence. %was [] 
complexsentence --> simplesentence, complexsentence. 
complexsentence --> simplesentence, delimiter, complexsentence. 
simplesentence --> noun, verb. 
delimiter --> [,]. 
noun --> [sun]. 
verb --> [shines]. 

然後:

% TEST: phrase(complexsentence, [sun,shines]). %will be TRUE 
% TEST: phrase(complexsentence, [sun,',',shines]). %will be FALSE (as it should) 
% TEST: phrase(complexsentence, [sun,shines,sun,shines]). %will be TRUE 
% TEST: phrase(complexsentence, [sun,shines,',',sun,shines]). %will be TRUE 
% TEST: phrase(complexsentence, [sun,shines,',']). %will be FALSE 

我建議第二次測試應該是假的,因爲問題的說明指出,...並且不允許逗號在單詞之間。

儘管最初的條款(complexsentence --> [].)爲complexsentence遞歸定義中提供的終止的情況下,它有兩個問題:(1)它定義的空句子作爲最簡單的複句,和(2)它允許一個尾隨定界符在一個有效的複句中(通過第3條,因爲你可以得到simplesentence, delimiter, []。使用complexsentence --> simplesentence.作爲基本案例更合乎邏輯,並將第二個問題作爲獎金修正,因爲你的其他案例在這種情況下是合乎邏輯的。

+0

它也適用。爲什麼你的解決方案比我的更好? ) –

+1

@RCola我試圖在我編輯的答案中提供一些解釋,我希望這會有所幫助。 – lurker