Déclarer une dynamique de prédicat dans gprolog
-
20-08-2019 - |
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?
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