Frage

Ich habe Probleme beim Einfügen von Fakten in eine bestehende Datei Prolog, ohne den ursprünglichen Inhalt zu überschreiben.

Angenommen, ich eine Datei test.pl haben:

:- dynamic born/2. 

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

Wenn ich das Laden in Prolog, und ich assert mehr Fakten:

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

Ich bin bewusst, dass ich dies tun sparen können:

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

Welche funktioniert aber test.pl enthält jetzt nur die Fakten, nicht die ": - dynamische geboren / 2":

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

Dies ist problematisch, weil, wenn ich diese Datei neu zu laden, werde ich nicht in der Lage sein, einfügen mehr Fakten in test.pl weil „: -. Dynamisch / 2 geboren“ existiert nicht mehr.

Ich habe irgendwo gelesen, dass, was ich tun konnte:

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

, die an das Ende der Datei nur Anfügen soll ich folgende Fehlermeldung jedoch erhalten:

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

Btw, ich bin mit SICStus Prolog. Hat dies einen Unterschied machen?

Danke!

War es hilfreich?

Lösung

Es ist nicht verwunderlich, es enthält nur die Fakten, wie das ist alles, was Sie ihm gesagt haben, zu speichern. Der einfachste Weg, um dies verwenden

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

oder eine kleine Prozedur schreiben, die dies tut. Je nachdem, wie Sie beabsichtigen, diese verwenden, können Sie prüfen save_program/1/2 und restore/1 verwendet wird.

Ich kann Ihnen nicht helfen, mit append/1 fürchte ich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top