9

説明書を読んでも、両者の違いがわかりません。

マニュアルには次のように書かれています。

動的述語のすべての句を消去するには、retractall/1 を使用することをお勧めします。

そこでretractall/1、プログラムで使用することにしました。しかし、私は違いが何であるか疑問に思います。

4

3 に答える 3

12

標準のretractall/1組み込み述語を使用して、動的述語のすべての句を削除できますが、述語はランタイムによって引き続き認識されます。一方abolish/1、標準の組み込み述語は、すべての述語句を削除するだけでなく、述語をランタイムに認識させません。を使用してすべての句を削除した後で動的述語を呼び出そうとするとretractall/1、呼び出しは単に失敗します。ただし、動的述語を廃止すると、後で呼び出すと述語存在エラーが発生します。

于 2015-12-27T23:45:00.587 に答える
7

SQL と同様に:

retractall(table_name(_,_,_))である可能性がありますがdelete from table_name、次の ようにabolish(table_name/3)再生されますdrop table_name

于 2015-12-28T08:02:04.850 に答える
3

あなたの質問と@PauloMouraの良い答えを読む前に、私も答えを知りませんでした。

この回答では、パウロの回答をコピーしたくありません。代わりに、別の Prolog 関連のソースを読んだり検索したりすることを検討することをお勧めします。

上記は、使用する Prolog システムに直接適合する場合と適合しない場合があることに注意してください。

それでも、複数の情報源を持つことは良いことです。行き詰まるのを防ぐことができます!

于 2015-12-28T07:57:07.380 に答える