Learn Prolog Now!を進めてきました。独学で、定款文法を学んでいます。実践セッションのタスクの 1 つに問題があります。タスクは次のとおりです。
形式言語 a n b 2m c 2m d nは、次の形式のすべての文字列で構成されます: a の切れていないブロックの後にbの切れていないブロックが続き、その後にcの切れていないブロックが続き、その後にdの切れていないブロックが続きます。、aとdのブロックがまったく同じ長さであり、cとdのブロックもまったく同じ長さであり、さらにそれぞれ偶数個のcとdで構成されるようにします。たとえば、ε、abbccd、およびaaabbbbccccdddはすべて a n b 2m c 2m d nに属します。この言語を生成する DCG を書きます。
a n d n、 b 2m c 2m、さらには a n b 2mと c 2m d nを生成するルールを書くことはできますが、これらすべてのルールを a n b 2m c 2mに結合することはできないようですd n . 以下は a n d nと b 2m c 2mを生成できる私のルールです。
s1 --> [].
s1 --> a,s1,d.
a --> [a].
d --> [d].
s2 --> [].
s2 --> c,c,s2,d,d.
c --> [c].
d --> [d].
a n b 2m c 2m d nは本当に CFG ですか? また、レッスンで教えられたことだけを使用して (追加の引数やコードなどを使用せずに) DCG を作成することは可能ですか? もしそうなら、与えられたタスクを解決できるように、これらに参加する方法を教えてもらえますか?