2009-05-09 16 views
6

tengo este código en Prolog:Declarar un predicado dinámica en gprolog

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

Pero aún así obtener este error:

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

cuando ejecuto Goto (foo).

He leído el dynamic documentation, pero no sé cómo usarlo, al menos en gprolog. ¿Me estoy perdiendo de algo?

+0

Finalmente usted debe conseguir ya una excepción durante la consulta de su programa. No debería permitir un hecho dinámico (_). La norma ISO solo dice que la dinámica es una directiva, pero en la mayoría de los Prologs también está incorporada, y por lo tanto no puede afirmarse como un hecho. –

Respuesta

11

fijar la primera línea de anteponiendo :-:

:- dynamic(player_at/1). 

Sin :- la línea sería dreefine predicado dynamic/1, en lugar de ejecutar el dynamic predicado existente.

Otras implementaciones de prólogo (pero no gprolog) apoyan esta así:

:- dynamic player_at/1. 
+0

Lo intenté - obtengo un error de sintaxis:. u operador esperado después de la expresión. No le gusta la dinámica sin un paréntesis. – Kai

+0

Se corrigió mi respuesta. – pts

Cuestiones relacionadas