在特定路径上移动机器人

时间:2014-05-22 09:58:24

标签: prolog

我有一个像这样的网格(我不知道网格的大小)

(-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,_,_]).

我不知道如何确保我不会错过网格的任何单元格

0 个答案:

没有答案