我正在使用 Ivan Bratko 的书:人工智能编程来研究DCG 语法和解析树。
在这本书中,我找到了以下示例,该示例显示了一个 DCG 语法,该语法还生成了一个解析树和一个用于表示某些移动后的位置的meaning/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.
为什么?怎么了?我错过了什么?