我做了以下序言:
mazePath(X1,Y1,X2,Y2,Maze,Path2) :-
nth0(0,Maze,Row,_),
length(Row,Width),
length(Maze,Height),
validPosition(X1,Y1,Width,Height),
validPosition(X2,Y2,Width,Height),
Path = [[]],
findadj(X1,Y1,X2,Y2,Maze,Path,Width,Height,Path2).
findadj(X,Y,X,Y,_,_,_,_,_).
findadj(X,Y,X2,Y2,Maze,Path,Width,Height,Path2) :-
(Xprime is X+1, Yprime is Y,
validPosition(Xprime,Yprime,Width,Height),\+ member([Xprime,Yprime],Path),
movable(Xprime,Yprime,Maze);
Xprime is X-1, Yprime is Y,
validPosition(Xprime,Yprime,Width,Height),\+ member([Xprime,Yprime],Path),
movable(Xprime,Yprime,Maze);
Xprime is X, Yprime is Y+1,
validPosition(Xprime,Yprime,Width,Height),\+ member([Xprime,Yprime],Path),
movable(Xprime,Yprime,Maze);
Xprime is X, Yprime is Y-1,
validPosition(Xprime,Yprime,Width,Height),\+ member([Xprime,Yprime],Path),
movable(Xprime,Yprime,Maze)),
Result = [[X,Y]|Path],
findadj(Xprime,Yprime,X2,Y2,Maze,Result,Width,Height,Path2).
此代码旨在解决二维数组“迷宫”,它很好。当我使用跟踪器跟踪代码时,我可以看到它正在找到正确的路径。
我的问题是我无法将路径“返回”到prolog终端(我知道prolog不返回值,但这基本上是我的目标)。 我不确定为什么我的路径没有被退回。我意识到我没有将变量Path2分配给任何东西,但我不知道该设置什么,因为我已经尝试了以下内容
Path2 = [[Xprime,Yprime]|NewPath].
Path2 = Result.
但没有效果。任何帮助将不胜感激。如果我遗漏任何必要的信息,请告诉我。
此外,以下是我收到的给定命令的输出
[debug] 106? - mazePath(0,0,4,3,[[0,0,0,0],[0,1,1,0],[0,1,0,0], [0,1,0,1],[0,0,0,0],路径)。
是的;
是的;
假。