質問

.plファイルでアルゴリズムを開発し、コマンドウィンドウのクエリで調べています。 動的変数を使用し、述語を撤回/アサートします。また、plファイルを変更して[変更したファイルを再読み込み]をクリックすると、不要な追加の事実があります。

たとえば、最初は counter(0)。

何かをして、このカウンターを撤回してアサートすると、counter(7)になります。次に、変更したplファイルをリロードすると、両方があります カウンター(0)。そして カウンター(7)。

これを防ぎ、counter(0)のみを使用するにはどうすればよいですか。最初は?

よろしくお願いします。

役に立ちましたか?

解決

挿入

:- abolish(counter/1).
.

ファイルの開始時に。テストが行われるときは、それを取り除きます。

他のヒント

これらの動的ファクトのみを使用してカウンターを実装する場合は、これが最善の方法であるかどうかを検討する必要があります。assert/1retract/1を使用すると、コードがかなり遅くなります。

カウンタ変数をコードで渡す別の述語引数にするか(入力と出力を区別する必要があるため、2つの追加の引数が必要になる場合があります)、グローバル変数(非論理機能です。ただし、これは場合によっては失敗します。

使用しているシステムによって異なります。YAP、B、GNU、SICStusでは、 ディレクティブ:- dynamic(counter/1).にはこの効果があります。つまり、 ファイルからの事実は、リロード後に存在します。

SWIでは、説明したとおりに動的述語が保持されます。述語が動的であるという情報を保持するretractall/1を使用して、それらを直接削除する必要があります。

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