2

我对 Prolog 很陌生。我需要在迷宫中找到从SourceDestination的所有路径。

我写了以下子句,这样我就不必明确地写出所有的边缘关系:

neighbour(X,Y) :-
   (  X =:= Y+1
   ;  Y =:= X+1
   ;  X =:= Y+6
   ;  Y =:= X+6
   ).

接下来,为了找到路径,我执行以下操作:

path(Source,Source,_).
path(Source,Destination,PathList) :-
    neighbour(Source,Z),                % find a neighbour of Source
    not(member(Z,PathList)),            % that is not already in the list
    % and see if there is a path from Z to Destination
    path(Z,Destination,[Source|PathList]). 

在运行它时,我查询了以下内容:

?- path(1,2,[]).    % "Is there a path from 1 to 2?"

这给了我以下错误:

ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR:   [10] 1=:=_26424+1
ERROR:    [9] neighbour(1,_26452) at /Users/sujitkumar/Desktop/this sem/PL/2.pl:3
ERROR:    [8] path(1,2,[]) at /Users/sujitkumar/Desktop/this sem/PL/2.pl:30
ERROR:    [7] <user>

我不明白为什么表达式没有得到评估。

4

0 回答 0