Prolog告诉我,当一个过程看起来被定义时,它是未定义的

Prolog告诉我,当一个过程看起来被定义时,它是未定义的,prolog,undefined,undefined-reference,swi-prolog,Prolog,Undefined,Undefined Reference,Swi Prolog,我是Prolog的新手,我很难弄明白为什么当我查询过程时,当它们看起来被定义时,它会告诉我过程是未定义的。这段代码是我的指导老师给我的,我不允许修改它,所以这一定是我编译它的方式有问题,或者与之相关的问题。我正在使用SWI Prolog IDE 我有2个.pl文件: print-maze.pl: printMaze() :- boundary(XMAX,YMAX), \+printMaze( p(-1,YMAX), XMAX ). printMaze( p( _, Y ), _ ) :- Y

我是Prolog的新手,我很难弄明白为什么当我查询过程时,当它们看起来被定义时,它会告诉我过程是未定义的。这段代码是我的指导老师给我的,我不允许修改它,所以这一定是我编译它的方式有问题,或者与之相关的问题。我正在使用SWI Prolog IDE

我有2个.pl文件:

print-maze.pl:

printMaze() :- boundary(XMAX,YMAX), \+printMaze( p(-1,YMAX), XMAX ).

printMaze( p( _, Y ), _ ) :- Y < -1, fail.
printMaze( p( X, Y ), XMAX ) :- Y >= -1, X > XMAX,
                                    nl,
                                    NewY is Y - 1,
                                    printMaze( p(-1,NewY), XMAX ).
printMaze( p( X, Y ), XMAX ) :- Y >= -1, X =< XMAX,
                                    printSpot( X, Y ),
                                    NewX is X + 1,
                                    printMaze( p(NewX,Y), XMAX ).

printSpot( X, Y ) :- (
                        ( X is -1, Y is -1 );
                        ( boundary( X, _ ), Y is -1 );
                        ( boundary( _, Y ), X is -1 );
                        boundary( X, Y )
                     ),
                     !, write( '+' ).
printSpot( X, Y ) :- ( boundary( X, _ ); X = -1 ),
                        !, N is Y mod 10, write( N ).
printSpot( X, Y ) :- ( boundary( _, Y ); Y = -1 ),
                        !, N is X mod 10, write( N ).
printSpot( X, Y ) :- goal( X, Y ), !, write( '*' ).
printSpot( X, Y ) :- wall( X, Y ), !, write( '-' ).
printSpot( _, _ ) :- write( ' ' ).

当我打开两个文件时,在编辑器中单击
Compile
,然后单击
Make
, 当我进行查询时:

?- goal(2,2).
?- printMaze().
我得到一个错误:

ERROR: Undefined procedure: goal/2 (DWIM could not correct goal)
ERROR: Undefined procedure: boundary/2
ERROR: In:
ERROR:    [9] boundary(_7002,_7004)
ERROR:    [8] printMaze at c:/users/jproc/documents/prolog/print-maze.pl:7
ERROR:    [7] <user>
当我进行查询时:

?- goal(2,2).
?- printMaze().
我得到一个错误:

ERROR: Undefined procedure: goal/2 (DWIM could not correct goal)
ERROR: Undefined procedure: boundary/2
ERROR: In:
ERROR:    [9] boundary(_7002,_7004)
ERROR:    [8] printMaze at c:/users/jproc/documents/prolog/print-maze.pl:7
ERROR:    [7] <user>
错误:未定义的过程:边界/2
错误:在:
错误:[9]边界(_7002,_7004)
错误:[8]c:/users/jproc/documents/prolog/print maze.pl:7处的printMaze
错误:[7]

goal/2
boundary/2
似乎是在
test0.pl
中定义的,那么给出了什么呢?

我发现问题是我需要转到
文件和
咨询…
并选择
test0.pl
。然后,查询给出了预期结果。

您可以通过单击此答案左侧的复选标记来接受自己的答案。你自己解决这个问题做得很好。在序言中不要对术语周围的空格太粗心可能是个好主意<代码>目标(2,3)
起作用,但
目标(2,3)
不解析。