我有一个像这样的网格(我不知道网格的大小)
(-1,1) (0,1) (1,1)
(-1,0) (0,0) (1,0)
(-1,-1) (0,-1) (1,-1)
在这个网格中有N个框。我想写一些谓词,以便在网格的每个单元格中移动机器人并检查是否有盒子。重要的是不要错过一个单元格,因为我不知道这些单元格在哪里。
首先,我有这个谓词
init([N,0,0])
N - number of boxex to discover
0,0 - my initial position
处理机器人移动的谓词具有这种结构
perform(+ProgramData, +ContainsBox, -Action, -ProgramDataUpdated)
perform([N,X,Y], false, move(west), [N,NX,Y]):- NX is X - 1, !
perform([N,X,Y],false, move(east), [N,NX,Y]):- NX is X + 1, !
perform([N,X,Y], false, move(north), [N,X,NY]):- NY is Y + 1, !
perform([N,X,Y], false, move(south), [N,X,NY]):- NY is Y - 1, !
如果盒子在单元格中,我有这个谓词:
discovered([N,X,Y],true,discovered,[NN,X,Y]):-NN is N-1,!.
如果我发现N个盒子我的程序结束了,我有这个谓词:
done([0,_,_],_,done,[0,_,_]).
我不知道如何确保我不会错过网格的任何单元格