在“prolog

时间:2015-11-04 08:04:38

标签: list recursion prolog

我做了以下序言:

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],路径)。

是的;

是的;

假。

0 个答案:

没有答案