Prolog 告诉我一个程序在它看起来被定义时是未定义的
Prolog tells me a procedure is undefined when it appears to be defined
我是 Prolog 的新手,我无法弄清楚为什么当我查询过程时它告诉我过程未定义,而它们似乎已定义。这段代码是我的导师给我的,我不允许更改它,所以这一定是我编译它的方式或与此相关的问题。我正在使用 SWI-Prolog IDE.
我有 2 个 .pl 文件:
打印-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( ' ' ).
和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/2
和 boundary/2
似乎是在 test0.pl
中定义的,所以给出了什么?
我发现问题是我需要去 File
和 Consult ...
和 select test0.pl
。之后,查询给出了预期的结果。
我是 Prolog 的新手,我无法弄清楚为什么当我查询过程时它告诉我过程未定义,而它们似乎已定义。这段代码是我的导师给我的,我不允许更改它,所以这一定是我编译它的方式或与此相关的问题。我正在使用 SWI-Prolog IDE.
我有 2 个 .pl 文件:
打印-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( ' ' ).
和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/2
和 boundary/2
似乎是在 test0.pl
中定义的,所以给出了什么?
我发现问题是我需要去 File
和 Consult ...
和 select test0.pl
。之后,查询给出了预期的结果。