猴子与香蕉在序言(Monkey & Banana in prolog)

2019-10-21 12:03发布

我有这样的序言代码解决猴子和香蕉的问题,但我的编译器给出错误

这是我的代码:


move(state(middle, onbox, middle, hasnot), grasp,
     state(middle, onbox, middle, has)).
move(state(Pos, onfloor, Pos, Has), climb,
     state(Pos, onbox, Pos, Has)).
move(state(Pos1, onfloor, Pos1, Has), push(Pos1, Pos2),
     state(Pos2, onfloor, Pos2, Has)).
move(state(Pos1, onfloor, Box, Has), walk(Pos1, Pos2),
     state(Pos2, onfloor, Box, Has)).

canget(state(_,_,_,has)).
canget(State1) :- move(State1, Move, State2), canget(State2).

错误:移动是辛格尔顿变量。
什么是我错了吗?

Answer 1:

canget(S0) :-
   S = state(_,_,_,has),
   closure0(\X^Y^move(X,_,Y),S0,S).

使用closure0/3和拉姆达



文章来源: Monkey & Banana in prolog
标签: prolog