faits dans un fichier ajout Prolog existant
-
05-10-2019 - |
Question
Je vais avoir du mal à insérer des faits dans un fichier Prolog existant, sans écraser le contenu original.
Supposons que j'ai un fichier test.pl:
:- dynamic born/2.
born(john,london).
born(tim,manchester).
Si je charge ce Prolog, et je assert d'autres faits:
| ?- assert(born(laura,kent)).
yes
Je suis conscient que je peux enregistrer ce en faisant:
|?- tell('test.pl'),listing(born/2),told.
Ce qui fonctionne, mais test.pl ne contient plus que les faits et non pas ": - dynamique né / 2":
born(john,london).
born(tim,manchester).
born(laura,kent).
Cette situation est problématique parce que si je recharger ce fichier, je ne serai pas en mesure d'insérer plus faits dans test.pl parce que « : - dynamique né / 2. » n'existe plus.
J'ai lu quelque part que je pouvais faire:
append('test.pl'),listing(born/2),told.
qui devrait juste ajouter à la fin du fichier, cependant, je reçois l'erreur suivante:
! Existence error in user:append/1
! procedure user:append/1 does not exist
! goal: user:append('test.pl')
BTW, j'utilise Sicstus Prolog. Est-ce une différence?
Merci!
La solution
Il est pas surprenant qu'il ne contient que les faits qui est tout ce que vous avez dit à enregistrer. La meilleure façon de contourner cela est d'utiliser
|?- tell('test.pl'), write(':- dynamic born/2.'), nl, listing(born/2), told.
ou écrire une petite procédure qui fait cela. Selon la façon dont vous avez l'intention d'utiliser ce que vous pouvez envisager d'utiliser save_program/1/2
et restore/1
.
Je ne peux pas vous aider avec append/1
j'ai peur.