Добавление фактов в существующий файл пролога - PullRequest
0 голосов
/ 27 мая 2010

У меня проблемы с вставкой фактов в существующий файл Prolog без перезаписи исходного содержимого.

Предположим, у меня есть файл test.pl:

:- dynamic born/2. 

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

Если я загружу это в пролог, и я утверждаю больше фактов:

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

Я в курсеЯ могу сохранить это, выполнив:

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

, который работает, но test.pl теперь содержит только факты, а не ": - dynamic born / 2":

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

Этопроблематично, потому что, если я перезагрузлю этот файл, я не смогу больше вставлять факты в test.pl, потому что ": - dynamic born / 2."больше не существует

Я где-то читал, что я мог бы сделать:

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

, который должен просто добавляться в конец файла, однако я получаю следующую ошибку:

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

Кстати, я использую пролог Sicstus.Имеет ли это значение?

Спасибо!

1 Ответ

2 голосов
/ 29 мая 2010

Не удивительно, что он содержит только факты, так как это все, что вы сказали, чтобы сохранить. Самый простой способ обойти это - использовать

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

или напишите небольшую процедуру, которая делает это. В зависимости от того, как вы собираетесь использовать это, вы можете рассмотреть возможность использования save_program/1/2 и restore/1.

Я не могу помочь тебе с append/1 Боюсь.

...