Pregunta

Estoy teniendo problemas para insertar datos en un archivo de Prolog existentes, sin sobrescribir el contenido original.

Supongamos que tengo un test.pl archivo:

:- dynamic born/2. 

born(john,london).
born(tim,manchester).

Si se me carga esta en el prólogo, y afirman más hechos:

| ?- assert(born(laura,kent)).
yes

Soy consciente de que puedo guardar esta haciendo:

|?- tell('test.pl'),listing(born/2),told.

Lo que funciona, pero test.pl ahora sólo contiene los hechos, no el ": - dinámica que nace / 2":

born(john,london).
born(tim,manchester).
born(laura,kent).

Esto es problemático porque si vuelvo a cargar este archivo, no voy a ser capaz de insertar más hechos en test.pl porque ": - dinámica que nace / 2". ya no existe.

He leído en alguna parte que, lo que podía hacer:

append('test.pl'),listing(born/2),told.

, que sólo debería añadir al final del archivo, sin embargo, me sale el siguiente error:

! Existence error in user:append/1
! procedure user:append/1 does not exist
! goal:  user:append('test.pl')

Por cierto, estoy usando SICStus prólogo. ¿Esto hace una diferencia?

Gracias!

¿Fue útil?

Solución

No es sorprendente que sólo contiene los hechos ya que es todo lo que haya dicho que para ahorrar. La forma más sencilla de evitar esto es utilizar

|?- tell('test.pl'), write(':- dynamic born/2.'), nl, listing(born/2), told.

o escribir un pequeño procedimiento que hace esto. Dependiendo de cómo se va a utilizar esto le puede considerar el uso save_program/1/2 y restore/1.

No puedo ayudarle con append/1 me temo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top