Объявление динамического предиката в gprolog
-
20-08-2019 - |
Вопрос
У меня есть этот код на Прологе:
dynamic(player_at/1).
player_at(house).
goto(X) :- retract(player_at(house)), assert(player_at(X)).
Но я все еще получаю эту ошибку:
uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1)
когда я выполняю goto(foo).
Я прочитал динамическая документация, но я не могу понять, как его использовать, по крайней мере, в gprolog.Я что-то пропустил?
Решение
Исправьте первую строку, добавив :-
:
:- dynamic(player_at/1).
Без :-
линия будет определять предикат dynamic/1
, вместо выполнения существующего dynamic
предикат.
Другие реализации пролога (кроме gprolog) также поддерживают это:
:- dynamic player_at/1.
Не связан с StackOverflow