0

元の内容を上書きせずに、既存の 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).

このファイルをリロードすると、":- dynamic Born/2." のため、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 プロローグを使用しています。これは違いがありますか?

ありがとう!

4

1 に答える 1

2

保存するように指示したのはそれだけであるため、事実のみが含まれていることは驚くことではありません。これを回避する最も簡単な方法は、

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

または、これを行う小さな手順を記述します。これをどのように使用するかによって、 および の使用を検討できsave_program/1/2ますrestore/1

恐れ入りますが、お手伝いできませんappend/1

于 2010-05-29T15:08:21.583 に答える