Prolog-メモリをクリアして最初から始める方法は?
-
29-10-2019 - |
質問
.plファイルでアルゴリズムを開発し、コマンドウィンドウのクエリで調べています。 動的変数を使用し、述語を撤回/アサートします。また、plファイルを変更して[変更したファイルを再読み込み]をクリックすると、不要な追加の事実があります。
たとえば、最初は counter(0)。
何かをして、このカウンターを撤回してアサートすると、counter(7)になります。次に、変更したplファイルをリロードすると、両方があります カウンター(0)。そして カウンター(7)。
これを防ぎ、counter(0)のみを使用するにはどうすればよいですか。最初は?
よろしくお願いします。
解決
挿入
:- abolish(counter/1).
.
ファイルの開始時に。テストが行われるときは、それを取り除きます。
他のヒント
これらの動的ファクトのみを使用してカウンターを実装する場合は、これが最善の方法であるかどうかを検討する必要があります。assert/1
とretract/1
を使用すると、コードがかなり遅くなります。
カウンタ変数をコードで渡す別の述語引数にするか(入力と出力を区別する必要があるため、2つの追加の引数が必要になる場合があります)、グローバル変数(非論理機能です。ただし、これは場合によっては失敗します。
使用しているシステムによって異なります。YAP、B、GNU、SICStusでは、
ディレクティブ:- dynamic(counter/1).
にはこの効果があります。つまり、
ファイルからの事実は、リロード後に存在します。
SWIでは、説明したとおりに動的述語が保持されます。述語が動的であるという情報を保持するretractall/1
を使用して、それらを直接削除する必要があります。
所属していません StackOverflow