Ivan Bratko の本: Programming fro Artificial Intelligence を使用して、DCG の文法と解析ツリーを勉強しています。
この本で、構文木を生成する DCG 文法と、いくつかの移動後の位置を意味するために使用される意味/2述語を示す次の例を見つけました。
これはコードです:
move(move(Step)) --> step(Step).
move(move(Step, Move)) --> step(Step), move(Move).
step(step(up)) --> [up].
step(step(down)) --> [down].
meaning(move(Step, Move), Dist):- meaning(Step, D1),
meaning(Move, D2),
Dist is (D1 + D2).
meaning(step(Step), Dist):- meaning(Step, Dist).
meaning(step(up), 1).
meaning(step(down), -1).
本で、次の出力を含む次のクエリを表示します。
move(Tree, [up,up,down, up, up], []), meaning(Tree, Dist).
Tree = move(step(up), move(step(up), move(step(down), move(step(up), move(step(up)))))),
Dist = 3
問題は、前のクエリを実行しようとすると、常に FALSE を取得することです (どのクエリでも false を取得します...)
?- move(Tree, [up,up,down, up, up], []), meaning(Tree, Dist).
false.
なんで?なにが問題ですか?何が足りないの?