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

問題4.65

4.4.1節の wheel 規則

(assert! (rule (wheel ?person)
               (and (supervisor ?middle-manager ?person)
                    (supervisor ?x ?middle-manager))))

実行結果

;;; Query input:
(wheel ?who)

;;; Query results:
(wheel (Warbucks Oliver))
(wheel (Warbucks Oliver))
(wheel (Bitdiddle Ben))
(wheel (Warbucks Oliver))
(wheel (Warbucks Oliver))

2つの質問を別々に実行して、動作を理解する。
まず、最初の質問 (supervisor ?middle-manager ?person)?middle-manager ?person それぞれへの束縛を含んだフレームのストリームができる。

;;; Query input:
(supervisor ?middle-manager ?person)

;;; Query results:
(supervisor (Aull DeWitt) (Warbucks Oliver))
(supervisor (Cratchet Robert) (Scrooge Eben))
(supervisor (Scrooge Eben) (Warbucks Oliver)) ;; ※1
(supervisor (Bitdiddle Ben) (Warbucks Oliver)) ;; ※2(2つめの質問において、対応する結果が3つ存在する)
(supervisor (Reasoner Louis) (Hacker Alyssa P))
(supervisor (Tweakit Lem E) (Bitdiddle Ben))
(supervisor (Fect Cy D) (Bitdiddle Ben))
(supervisor (Hacker Alyssa P) (Bitdiddle Ben)) ;; ※3

先のフレームに対し、2つめの質問 (supervisor ?x ?middle-manager) でフィルタをし、結果のストリームを作る。

;;; Query input:
(supervisor ?x (Aull DeWitt))

;;; Query results:

;;; Query input:
(supervisor ?x (Cratchet Robert))

;;; Query results:

;;; Query input:
(supervisor ?x (Scrooge Eben))

;;; Query results:
(supervisor (Cratchet Robert) (Scrooge Eben)) ;; ※1

;;; Query input:
(supervisor ?x (Bitdiddle Ben))

;;; Query results:
(supervisor (Tweakit Lem E) (Bitdiddle Ben)) ;; ※2
(supervisor (Fect Cy D) (Bitdiddle Ben)) ;; ※2
(supervisor (Hacker Alyssa P) (Bitdiddle Ben)) ;; ※2

;;; Query input:
(supervisor ?x (Reasoner Louis))

;;; Query results:

;;; Query input:
(supervisor ?x (Tweakit Lem E))

;;; Query results:

;;; Query input:
(supervisor ?x (Fect Cy D))

;;; Query results:

;;; Query input:
(supervisor ?x (Hacker Alyssa P))

;;; Query results:
(supervisor (Reasoner Louis) (Hacker Alyssa P)) ;; ※3
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»