Пролог говорит мне, что процедура не определена, хотя кажется, что она определена

Я новичок в Прологе, и мне трудно понять, почему он говорит мне, что процедуры не определены, когда я их запрашиваю, когда они кажутся определенными. Этот код дал мне мой инструктор, и мне не разрешено его изменять, поэтому, должно быть, проблема в том, как я его компилирую, или в чем-то связанном с этим. Я использую 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( ' ' ).

и 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, так что же дает?

Возможно, не стоит слишком небрежно относиться к пробелам вокруг терминов в Прологе; goal( 2, 3 ) работает, но goal (2, 3) не разбирает.

Daniel Lyons 10.04.2019 05:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
120
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я понял, что проблема в том, что мне нужно перейти к File и Consult ... и выбрать test0.pl. После этого запросы дали ожидаемые результаты.

Вы можете принять свой ответ, нажав на галочку слева от этого ответа. Неплохая работа по выяснению этого самостоятельно.

Guy Coder 10.04.2019 01:33

Другие вопросы по теме