Объявление динамического предиката в gprolog

StackOverflow https://stackoverflow.com/questions/844043

  •  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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top