2015-12-27 11 views
5

マニュアルを読むことで、私は2つの違いを見つけることができないようです。abolish/1とretractall/1の違いは何ですか?

マニュアルは言う:

動的述語のすべての条項を消去するためretractall/1を使用することをお勧めします。

私は自分のプログラムでretractall/1を使いました。しかし、私は違いが何であるのだろうか。

答えて

6

retractall/1標準の組み込み述語を使用して、動的述語のすべての節を削除できますが、述語は引き続き実行時に認識されます。一方、標準組み込み述部abolish/1は、すべての述語句を削除するだけでなく、実行時にその述語を未知にします。 retractall/1を使用してすべての句を削除した後に動的述語を呼び出そうとすると、呼び出しは失敗します。しかし、動的述語を廃止すると、それを後に呼び出すと、述語の存在のエラーが発生します。

+0

S(X)としてプレーだろうが

retractall(table_name(_,_,_))は、delete from table_nameかもしれません! – repeat

2

あなたの質問と@PauloMoura's fine answerを読む前に、私は答えも知らなかった。

この回答で私はパウロの答えをコピーしたくありません。代わりに、私はあなたが代替プロローグ関連の情報源を探して/読んでみ勧め:

manual

  • 6.10.1 Modification of the Data Base -part。

    まだ、複数のソースを持つことは良いことです:それはあなたが立ち往生するのを防ぐことができます! SQLと同様に

  • 4

    :簡潔: abolish(table_name/3)drop table_name

    関連する問題