Ivan Bratkoの本「人工知能のプログラミング」を使用してPrologでDCG文法を勉強しています.PrologがDCG文法を一連のPrologルールに自動的に変換する方法を理解するための問題を見つけています。
たとえば、次の DCG 文法があります。
move --> step.
move --> step, move.
step --> [up].
step --> [down].
どこ:
mooveは可能な mooves のリストで、stepは上または下の 1 つの動きです。
したがって、移動のリストは単一の移動 (ステップ) である場合もあれば、単一の移動 (ステップ) の後に移動のリスト (移動) が続くと見なすことができる複数の移動で構成されたリストである場合もあります。
したがって、この文法は次のようなフレーズを生成できます: [up, down, down, up, down] または like: [up]
これはとても簡単です
次に、Prolog が以前の DCG 文法を一連の標準 Prolog ルールに自動的に変換する方法を示します (このコードを以前の DCG 文法と同じファイルに入れたため、名前を move2 および step2 に変更しました)。
/* move2 it is TRUE if the difference from the lists List and Rest is an
acceptable move.
*/
/* BASE CASE: A moves list can be a single move (a step that can be "up" or "down")
It is TRUE that the difference from the lists List and Rest is an acceptable move
if it is TRUE that the head of the list is an acceptable move
*/
move2(List, Rest) :- step2(List, Rest).
/* GENERAL CASE: A moves list can be a single move followed by a list of moves.
The difference of List1 and Rest is a valid move if it is TRUE that:
the difference between List1 and List 2 is a step
the difference between List2 and Rest is a move
*/
move2(List1, Rest) :- step2(List1, List2),
move2(List2, Rest).
/* step predicate extract a single step ("up" or "down") from a list
*/
step2([up|Rest], Rest).
step2([down|Rest], Rest).
コメントに書いたように、これらのルールの意味を解釈しようとしましたが、私の解釈についてはよくわかりません...
よく理解するためのヒントを教えてください。
TNX
アンドレア