Вопрос

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

Предположим, у меня есть файл 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 Prolog. Это имеет значение?

Спасибо!

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top