Prolog告诉我,当一个程序似乎被定义时,它是未定义的

问题描述 投票:-1回答:1

我是Prolog的新手,我无法弄清楚为什么当我查询程序时,它们告诉我程序是未定义的,当它们看起来是定义的时候。这段代码是由我的导师给我的,我不允许改变它,所以它一定是我编译它的方式或与之相关的问题。我正在使用SWI-Prolog IDE。

我有2个.pl文件:

print-maze.评论:

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( ' ' ).

和test0.pl:


goal( 2, 2 ).
boundary( 3, 3 ).

wall( 0, 1 ).
wall( 0, 2 ).
wall( 2, 0 ).
wall( 2, 1 ).

% 0,0
% 2,2

:- load_files( 'print-maze.pl' ).

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

?- goal(2,2).

我收到错误:

ERROR: Undefined procedure: goal/2 (DWIM could not correct goal)

当我做查询时:

?- printMaze().

我收到错误:

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/2boundary/2似乎是在test0.pl中定义的,那么是什么给出了?

prolog undefined undefined-reference swi-prolog
1个回答
1
投票

我发现问题是我需要去FileConsult ...并选择test0.pl。之后,查询给出了预期的结果。

© www.soinside.com 2019 - 2024. All rights reserved.