問題4.63 – SICP(計算機プログラムの構造と解釈)その236

問題4.63

Adam の子孫のデータベース

(assert! (son Adam Cain))
(assert! (son Cain Enoch))
(assert! (son Enoch Irad))
(assert! (son Irad Mehujael))
(assert! (son Mehujael Methushael))
(assert! (son Methushael Lamech))
(assert! (wife Lamech Ada))
(assert! (son Ada Jabal))
(assert! (son Ada Jubal))

孫の検索には son-of 規則を使って、妻の息子も探せるようにする。

(assert! (rule (grandson-of ?g ?s)
               (and (son-of ?f ?s)
                    (son-of ?g ?f))))

(assert! (rule (son-of ?m ?s)
               (or (son ?m ?s)
                   (and (wife ?m ?w)
                        (son ?w ?s)))))

実行結果

;;; Query input:
(grandson-of Cain ?who)

;;; Query results:
(grandson-of Cain Irad)

;;; Query input:
(son-of Lamech ?who)

;;; Query results:
(son-of Lamech Jubal)
(son-of Lamech Jabal)

;;; Query input:
(grandson-of Methushael ?who)

;;; Query results:
(grandson-of Methushael Jubal)
(grandson-of Methushael Jabal)
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»