Ho questo codice Prolog:Dichiarare un predicato dinamica gprolog
dynamic(player_at/1).
player_at(house).
goto(X) :- retract(player_at(house)), assert(player_at(X)).
Ma ho ancora ottenere questo errore:
uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1)
quando eseguo goto (foo).
Ho letto il dynamic documentation, ma non riesco a capire come usarlo, almeno in gprolog. Mi sto perdendo qualcosa?
Alla fine si dovrebbe ottenere già un'eccezione durante la consultazione del programma. Non dovrebbe consentire un fatto dinamico (_). Lo standard ISO dice solo che la dinamica è una direttiva, ma nella maggior parte dei Prolog è anche un built-in, e non può quindi essere asserito come un dato di fatto. –