説明書を読んでも、両者の違いがわかりません。
マニュアルには次のように書かれています。
動的述語のすべての句を消去するには、retractall/1 を使用することをお勧めします。
そこでretractall/1
、プログラムで使用することにしました。しかし、私は違いが何であるか疑問に思います。
説明書を読んでも、両者の違いがわかりません。
マニュアルには次のように書かれています。
動的述語のすべての句を消去するには、retractall/1 を使用することをお勧めします。
そこでretractall/1
、プログラムで使用することにしました。しかし、私は違いが何であるか疑問に思います。
標準のretractall/1
組み込み述語を使用して、動的述語のすべての句を削除できますが、述語はランタイムによって引き続き認識されます。一方abolish/1
、標準の組み込み述語は、すべての述語句を削除するだけでなく、述語をランタイムに認識させません。を使用してすべての句を削除した後で動的述語を呼び出そうとするとretractall/1
、呼び出しは単に失敗します。ただし、動的述語を廃止すると、後で呼び出すと述語存在エラーが発生します。
SQL と同様に:
retractall(table_name(_,_,_))
である可能性がありますがdelete from table_name
、次の
ようにabolish(table_name/3)
再生されますdrop table_name
あなたの質問と@PauloMouraの良い答えを読む前に、私も答えを知りませんでした。
この回答では、パウロの回答をコピーしたくありません。代わりに、別の Prolog 関連のソースを読んだり検索したりすることを検討することをお勧めします。
ISO ディレクティブ、制御構造、組み込み—<a href="/questions/tagged/iso-prolog" class="post-tag" title="show question tagged 'iso-prolog'" rel="tag">iso- SOのプロローグ
4.12.5 データベースから条項を削除する—<a href="/questions/tagged/sicstus-prolog" class="post-tag" title="show question tagged 'sicstus-prolog'" rel="tag">sicstus-プロローグマニュアル
8.7 動的条項管理— <a href="/questions/tagged/gnu-prolog" class="post-tag" title="show question tagged 'gnu-prolog'" rel="tag">gnu-prologマニュアル
第 9 章動的句とグローバル変数—<a href="/questions/tagged/bprolog" class="post-tag" title="show question tagged 'bprolog'" rel="tag">bprologマニュアル
6.14アサート、撤回、およびその他のデータベース変更— <a href="/questions/tagged/xsb" class="post-tag" title="show question tagged 'xsb'" rel="tag">xsbマニュアル
6.10.1データベースの修正— yap マニュアルの一部
上記は、使用する Prolog システムに直接適合する場合と適合しない場合があることに注意してください。
それでも、複数の情報源を持つことは良いことです。行き詰まるのを防ぐことができます!