Prologを使用して、文脈自由文法を認識true
し、入力リストが CFG に一致するかどうかを返す述語を作成しようとしています。
入力のアルファベットは のみで構成されていますa,b
。私が一致させようとしているCFGは
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
ルール を実装する方法がよくわかりません。