问题:
机器人搬盒子问题:设在一个房间里,有一个机器人ROBOT ,一个壁橱ALCOVE,一个积木块BOX,两个桌子A和B。开始时,机器人ROBOT在壁橱ALCOVE旁边,且两手空空,桌子A放着积木块BOX,桌子B是空的。机器人可把积木块BOX从一种状态桌子A上变换成另一种状态桌子B上,然后回到壁橱。
代码:
%state(Robot,Table,Box,Hold,On,Move).
%robot:机器人位置,可以是a、b、alcove
%table:目标桌子,b
%box:盒子位置,开始在a,后来在b
%hold:1机器人手中有盒子0没有盒子
%on:1目标桌子上有盒子0目标桌子上没有盒子,b上有没有盒子
%move:是否刚刚移动过,0没有,1有
move_field(X):-member(X,[a,b,alcove]).
rules(state(X,Y,Z,_,_,0),state(W,Y,Z,_,_,1),move_robot(X,W)):-move_field(X),move_field(Y),move_field(Z),move_field(W),X\=W.
rules(state(X,Y,X,0,0,1),state(X,Y,X,1,0,0),pickup_robot(box)):-move_field(X),move_field(Y).
rules(state(X,X,Y,1,0,1),state(X,X,X,0,1,0),setdown_robot(box)):-move_field(X),move_field(Y).
rules(X,Y,Z):-rules(X,W,A),rules(W,Y,B),Z=[A,B].