9

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

たとえば、最初はcounter(0)があります。

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

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

前もって感謝します。

4

3 に答える 3

6

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

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

于 2011-12-07T15:29:59.790 に答える
4

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

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

于 2011-12-07T15:30:35.040 に答える
3

入れる

:- abolish(counter/1).

ファイルの先頭に。テストが完了したら、それを削除します。

于 2011-12-07T15:17:13.527 に答える