Объявление динамики предиката в gprolog - PullRequest
7 голосов
/ 10 мая 2009

У меня есть этот код в прологе:

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. Я что-то упустил?

1 Ответ

13 голосов
/ 10 мая 2009

Исправьте первую строку, добавив :-:

:- dynamic(player_at/1).

Без :- строка будет указывать на предикат dynamic/1 вместо выполнения существующего предиката dynamic.

Другие реализации пролога (кроме gprolog) также поддерживают это:

:- dynamic player_at/1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...