開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- MIT/GNU Scheme (処理系)
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の4(超言語的抽象)、4.4(論理型プログラミング)、4.4.3(論理型プログラミングは数学的論理か)、無限ループ、notに関する問題、問題 4.69を解いてみる。
その他参考書籍
問題 4.69
孫の関係に「great[孫の子]」を追加する規則を公安。
;; データベース
(son Adam Cain)
(son Cain Enoch)
(son Enoch Irad)
(son Irad Mehujael)
(son Mehujael Methushael)
(son Methushael Lamech)
(wife Lamech Ada)
(son Ada Jabal)
(son Ada Jubal)
;; 孫を見つけるための規則を形式化
(rule (grandson ?g ?s)
(and (son ?f ?s)
(son ?g ?f)))
;; 息子を見つける規則を形式化
(rule (son ?m ?s)
(or (son ?m ?s)
(and (wife ?m ?w)
(son ?w ?s))))
;; リストの最後が語grandsonで終わるかどうか見る規則last
(rule (last (grandson)))
(rule (last (?u . ?v))
(last ?v))
;; 孫の子
(rule ((grandson) ?x ?y)
(grandson ?x ?y))
;; 孫の子の子の…
(rule ((great . ?rel) ?x ?y)
(and (son ?x ?z)
(?rel ?z ?y)
(last ?rel)))
出来た規則をScheme - 推論的情報検索(データベースと複雑な関係を推論する規則)の確認結果等も使いながら、((great grandson) ?g ?ggs)と(?relationship Adm Irad)の2つの質問で手動で確認。
;; Cainの孫の子
;; ?xに値Cabinを束縛
((great grandson) Cabin ?y)
(and (grandson Cabin ?z)
(son ?z ?y))
;; ?zに値Mehujaelを束縛
((great grandson) Cabin ?y)
(and (grandson Cabin Mehujael)
(son Mehujael ?y))
;; ?yに値Methushaelを束縛
((great grandson) Cabin Methushael)
(and (grandson Cabin Mehujael)
(son Mehujael Methushael))
;; よってCabinの孫の子はMethushael
;; AdamとIradの関係
;; ?xに値Adam、?yに値Iradを束縛
((great . ?rel) Adam Irad)
(and (son Adam ?z)
(?rel ?z Irad)
(last ?rel))
;; ?zに値Cainを束縛
((great . ?rel) Adam Irad)
(and (son Adam Cain)
(?rel Cain Irad)
(last ?rel))
;; ?relに(grandson)を束縛して、
((great . (grandson)) Adam Irad)
(and (son Adam Cain)
((grandson) Cain Irad)
(last (grandson)))
((great grandson) Adam Irad)
(and (son Adam Cabin)
((grandson) Cain Irad)
(last (grandson)))
;; よって、AZdamの孫の子はIrad
とりあえず、2つの質問は正しい結果を導き出すことを確認できた。
質問システムの実装はまだ(この先に実装もあるみたい)なので、実装できたら入出力結果を確認してみることに。
0 コメント:
コメントを投稿