Domanda

Ho problemi di inserire i fatti in un file Prolog esistente, senza sovrascrivere il contenuto originale.

Supponiamo che io abbia un file test.pl:

:- dynamic born/2. 

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

Se carico questo prologo, e affermo più fatti:

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

Sono consapevole che posso salvare questo facendo:

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

Il che funziona, ma test.pl ora contiene solo i fatti, non la ": - dinamica nati / 2":

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

Questo è problematico perché se ricarico questo file, non sarò in grado di inserire più fatti in test.pl perché ": -. Dinamica nascita / 2" non esiste più.

Ho letto da qualche parte che, avrei potuto fare:

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

che dovrei aggiungere alla fine del file, tuttavia, ho il seguente errore:

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

A proposito, sto usando SICStus prologo. Questo fa la differenza?

Grazie!

È stato utile?

Soluzione

Non è sorprendente che contiene solo i fatti come questo è tutto quello che hai detto che per salvare. Il modo più semplice per aggirare questo è di usare

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

o scrivere una piccola procedura che fa questo. A seconda di come si intende utilizzare questo si può considerare l'utilizzo save_program/1/2 e restore/1.

Non posso aiutarti con append/1 ho paura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top