Prolog 写経記 その 87 retractall/1
(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.
- 作者: ボグダンフィリピッチ,中島誠,伊藤哲郎
- 出版社/メーカー: 海文堂出版
- 発売日: 1990/08
- メディア: 単行本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (68件) を見る
retractall/1
を写経します.解説
retractall(X)
は頭部X
を持つすべての節をデータベースから削除する.
ふむ.
モード
retractall(+)
ふむ.
定義
では,こいつの定義を写経しませう.
retract_all(X) :- retract(X), fail. retract_all(X) :- retract((X :- _)), fail. retract_all(_).
...
こらこら,タイトルは retractall
なのに勝手に retract_all
にするってどういうことよ?
まぁ,どうせ組み込みの retractall
とかぶるから名前変えないといけなかったわけですが.
ともあれ (JW),定義自体はたいしたことなし.
fail/0
を使って事実 (頭部のみ) とルール (頭部と本体) のそれぞれの削除が成功しようが失敗しようが 3 つの節を全部実行して成功裡に終わるというのが目新しいくらいでしょうか.
注意
組み込み述語
retract
とretractall
の引数の間には相違がある.retract(X)
は節X
をデータベースから削除するが,retractall(X)
は頭部X
を持つ節のすべてを削除する.
ほいほい.
例
では使用例を写経しませう.
2 ?- assert(employee(john)),
assert(employee(tom)), |
assert(employee(paul)), |
listing(employee). |
ふむ.
登録した述語がきれいさっぱりまるっと消えていますね.
そんなわけで (どんなわけで?),「9 章 標準述語の導入」は終了です.
次回からは「10 章 手続き的構造の導入」です.
うーみゅ,あまり興味ないテーマが続きますな.
手続き的な思考しかできない脳を宣言的に鍛えるために Prolog 始めたんだけどなぁ.
分かってないなぁ.
っていうか,読む本を間違えているってことですかそうですか.
無念だ.
でも大丈夫です.
読んでる Prolog 本はこれだけではありません.
最近はもっぱら「The Art of Prolog 2ed (isbn:0262193388)」かな.
Prolog 本というより,たまたま Prolog を使っている論理プログラミング本という気配が漂っていてちょっとしんどいですけど.
あとは「The Craft of Prolog (isbn:0262150395)」も.こちらは「Effective Prolog」みたいなのりでよさげ.