Hola,
Soy un estudiante de la Facultad de Informatica que asistio a las clases de Extensiones de Programacion Logica el año pasado. En dicho año aprendimos a usar los llamados modulos activos como una especie de mini servidores, y a usar las bases de datos persistentes. El problema que tengo es que no consigo hacer funcionar nada que tenga una base de datos persistente, ni siquiera los ejemplos que vienen en la documentacion.
El programa de prueba que uso es el que viene en la documentacion:
:- include(library(persdb)).
%% Required declarations for persistent_dir/2.
:- multifile persistent_dir/2.
:- data persistent_dir/2.
%% Declare the directory associated to the key "db" where the
%% persistence sets of the persistent predicates are stored:
persistent_dir(db,'./').
%% Declare a persistent predicate:
:- persistent(bar/1, db).
%% Read a term, storing it in a new fact of the persistent predicate
%% and list all the current facts of that predicate
main:-
read(X),
passertz_fact(bar(X)),
findall(Y,bar(Y),L),
write(L).
Luego, escribo en el toplevel: make_exec('./prueba.pl',_).
obteniendo asi el ejecutable. Tras ejecutarlo obtengo el siguiente mensaje de error:
{ERROR: No handle found for thrown error error(existence_error(source_sink,/temp/prolog/user/bar_1.pl),-(/($open,3),1))}
con lo cual no consigo nada. Creo que es porque no se crea bien la base de datos, que supongo que sera el fichero
"bar_1.pl" que intenta abrir. He intentado todo lo que se me ha ocurrido y no he conseguido nada.
Si cargo el programa en el toplevel (uso las emacs) obtengo el error:
ensure_loaded('c:/temp/prolog/prueba.pl'). {ERROR: persdbrt:init_persdb/0 - undefined predicate}
yes ?-
He notado que si voy al directorio /library/persdb/ y cargo persdb.pl y la cargo en el toplevel (con CTRL-C-L) me da el
mismo error (como si la libreria no estuviera bien?).
He intentado crear el fichero /user/bar_1.pl a mano, pero entonces tras escribir lo que me pide con el read
obtengo el error:
{ERROR: No handle found for thrown error error(existence_error(procedure,/(user:passertz_fact,1)),/(user:passertz_fact,1))}
¿ Me puede indicar alguien que es lo que estoy haciendo mal ?
Muchas Gracias por adelantado,
Borja Garcia-Almuzara Rodriguez
email: d960022(a)zipi.fi.upm.es
borja_g(a)teleline.es
NOTA: Estoy probandolo todo en el W98, con el ciao-1.7p30Win32