マニュアルを読むことで、私は2つの違いを見つけることができないようです。abolish/1とretractall/1の違いは何ですか?
マニュアルは言う:
動的述語のすべての条項を消去するためretractall/1を使用することをお勧めします。
私は自分のプログラムでretractall/1
を使いました。しかし、私は違いが何であるのだろうか。
マニュアルを読むことで、私は2つの違いを見つけることができないようです。abolish/1とretractall/1の違いは何ですか?
マニュアルは言う:
動的述語のすべての条項を消去するためretractall/1を使用することをお勧めします。
私は自分のプログラムでretractall/1
を使いました。しかし、私は違いが何であるのだろうか。
retractall/1
標準の組み込み述語を使用して、動的述語のすべての節を削除できますが、述語は引き続き実行時に認識されます。一方、標準組み込み述部abolish/1
は、すべての述語句を削除するだけでなく、実行時にその述語を未知にします。 retractall/1
を使用してすべての句を削除した後に動的述語を呼び出そうとすると、呼び出しは失敗します。しかし、動的述語を廃止すると、それを後に呼び出すと、述語の存在のエラーが発生します。
あなたの質問と@PauloMoura's fine answerを読む前に、私は答えも知らなかった。
この回答で私はパウロの答えをコピーしたくありません。代わりに、私はあなたが代替プロローグ関連の情報源を探して/読んでみ勧め:
The ISO directives, control constructs and builtins - iso-prolog SO
に4.12.5 Removing Clauses from the Databaseからsicstus-prologmanual
Chapter 9 Dynamic Clauses and Global Variablesからbprologmanual
6.14 Asserting, Retracting, and Other Database Modifications - 上記may or may notが直接the Prolog system you useに合うことyapmanual
6.10.1 Modification of the Data Base -part。
まだ、複数のソースを持つことは良いことです:それはあなたが立ち往生するのを防ぐことができます! SQLと同様に
:簡潔: abolish(table_name/3)
はdrop table_name
S(X)としてプレーだろうが
retractall(table_name(_,_,_))
は、delete from table_name
かもしれません! – repeat