質問

元のコンテンツを上書きすることなく、既存のPrologファイルに事実を挿入するのに苦労しています。

ファイルテストがあると仮定します。pl:

:- dynamic born/2. 

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

これをPrologにロードし、より多くの事実を主張する場合:

| ?- 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に挿入できないため、これは問題です。もう存在しません。

私はどこかでそれを読みました、私はできました:

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/2restore/1.

私はあなたを助けることができません append/1 私は怖いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top