Friday, May 6, 2011

Declaring a predicate dynamic in gprolog

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 predicate dynamic/1, instead of executing the existing dynamic 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.