2017-07-08 86 views
0

我有一個解析語法的謂詞。 語法的產品有:SWI-Prolog解析DCG謂詞不起作用

S-> B B->bB B->b

謂詞取意在列表和確定列表是否屬於語法。我的代碼如下:

s(List,[]):- b(List,[]). 
b(List,[]):-'C'(List,b,X), b(X,[]). 
b([b|List],List). 

謂詞似乎能夠確定[B]是一個解決方案,但是,它無法檢測到[B,B,B]也是一種解決方案。

例如,

?-s([b],[]). 
true. 
?-s([b,b,b],[]). 
false. 

我覺得我的代碼的第二行是沒有做什麼,我也想,但我不知道如何解決它。

+2

使用[標籤:DCG],而不是! 's - > b。 b - > [b],b。 b - > [b] .'用法:'短語(b,L)。' – false

+0

哇,我大大地過度使這變得複雜。謝謝! –

+2

更簡單:'b - > [b],([] | b).' – false

回答

1

如果你願意瞭解的Prolog和DCG中的基礎知識,把這個解決方案:

s(List):- b(List,[]). 
b([b|List],Rest):- b(List,Rest). 
b([b],[]).