Question

J'ai ce code dans Prolog:

dynamic(player_at/1).
player_at(house).
goto(X) :- retract(player_at(house)), assert(player_at(X)).

Mais j'obtiens toujours cette erreur:

uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1)

quand j'exécute goto (foo).

J'ai lu la documentation dynamique . , mais je n'arrive pas à comprendre comment l'utiliser, du moins dans gprolog. Est-ce que je manque quelque chose?

Était-ce utile?

La solution

Corrigez la première ligne en ajoutant un préfixe :-:

:- dynamic(player_at/1).

Sans dynamic/1 la ligne dreefine le prédicat dynamic au lieu d'exécuter le prédicat <=> existant.

D'autres implémentations de prologue (mais pas gprolog) le supportent également:

:- dynamic player_at/1.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top