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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top