開発環境
- 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 コメント:
コメントを投稿