-2
使用序言我想寫一個謂詞識別上下文無關文法如果輸入列表匹配的CFG返回true
。
輸入的字母只包含a,b
。 我試圖匹配的CFG是Prolog程序識別上下文無關文法一^ N b^N
S-> TT
T -> aTb | ab
我不太清楚如何實現這一點,主要的T規則。
s(S0,S):-t(S0,S),t(S1,S).
t(S0,S):-S0 = a, t(S1,S), S1 = b; S0 = a, S1 = b.
match([H|T] :- s(H,T).
所以,如果我查詢[a, a, b, b]
它應該返回true
。 但是,我只是得到一個無限循環。 我不太清楚如何執行a^n b^n
規則。
的可能的複製[識別在Prolog中沒有算術甲^ N乙^ N語言(http://stackoverflow.com/questions/16416153/recognition-an-bn-language-in-prolog-without-arithmetics),它可以很容易地專門處理這個問題;其要點是「使用DCG」。 – 2013-05-08 10:27:11
昨天有人問這個問題。請花三十秒尋找一個可能已經存在的答案,然後再問。 – 2013-05-08 14:18:01