I have this code in Prolog:
dynamic(player_at/1).
player_at(house).
goto(X) :- retract(player_at(house)), assert(player_at(X)).
But I still get this error:
uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1)
when I execute goto(foo).
I've read the dynamic documentation, but I can't figure out how to use it, at least in gprolog. Am I missing something?
From stackoverflow
-
Fix the first line by prepending
:-
::- dynamic(player_at/1).
Without
:-
the line would dreefine predicatedynamic/1
, instead of executing the existingdynamic
predicate.Other prolog implementations (but not gprolog) support this as well:
:- dynamic player_at/1.
Kai : I tried that - I get syntax error: . or operator expected after expression. It doesn't like the dynamic without a parenthesis.pts : Fixed my answer. -
That answer is correct, and :- dynamic also works in GProlog.
Alberto
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.