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

問題4.57

問題文が非常に解りにくい…
"person-1 が person-2 と同じ担当である" というのはすぐ理解できるが、その次の条件がよく解らない。

(assert! (rule (same ?x ?x)))

(assert! (rule (replace ?person-1 ?person-2)
               (and
                 (or (and (job ?person-1 ?job)
                          (job ?person-2 ?job))
                     (and (job ?person-1 ?job-1)
                          (job ?person-2 ?job-2)
                          (can-do-job ?job-2 ?job-1)))
                 (not (same ?person-1 ?person-2)))))

a. Cy D. Fect に代われる人すべて

(replace (Fect Cy D) ?who)

実行結果

;;; Query input:
(replace (Fect Cy D) ?who)

;;; Query results:
(replace (Fect Cy D) (Bitdiddle Ben))
(replace (Fect Cy D) (Hacker Alyssa P))

マイクロシャフト社組織図

ここで、仮に person-1 を Cy D. Fect にして、person-1 の仕事をする誰かというのを同じ computer programmer の Alyssa P. Hacker とする。
Alyssa P. Hacker は can-do-job の表明(assertion)により、監督をしている computer programmer trainee の Louis Reasoner の仕事ができるので、person-2 を Louis Reasoner とすることができる。
したがって、Cy D. Fect (person-1) は Louis Reasoner (person-2) に代わることができる。

;;; Query input:
(replace (Reasoner Louis) ?who)

;;; Query results:
(replace (Reasoner Louis) (Fect Cy D))
(replace (Reasoner Louis) (Hacker Alyssa P))

b. 誰かに代われて、その誰かの方が多くの給料を貰っている人すべてと、両者の給料

(and (salary ?person ?salary)
     (salary ?substitution ?salary-sub)
     (replace ?person ?substitution)
     (lisp-value < ?salary ?salary-sub))

実行結果

;;; Query input:
(and (salary ?person ?salary)
     (salary ?substitution ?salary-sub)
     (replace ?person ?substitution)
     (lisp-value < ?salary ?salary-sub))

;;; Query results:
(and (salary (Reasoner Louis) 30000) (salary (Fect Cy D) 35000) (replace (Reasoner Louis) (Fect Cy D)) (lisp-value < 30000 35000))
(and (salary (Reasoner Louis) 30000) (salary (Hacker Alyssa P) 40000) (replace (Reasoner Louis) (Hacker Alyssa P)) (lisp-value < 30000 40000))
(and (salary (Tweakit Lem E) 25000) (salary (Bitdiddle Ben) 60000) (replace (Tweakit Lem E) (Bitdiddle Ben)) (lisp-value < 25000 60000))
(and (salary (Fect Cy D) 35000) (salary (Hacker Alyssa P) 40000) (replace (Fect Cy D) (Hacker Alyssa P)) (lisp-value < 35000 40000))
(and (salary (Fect Cy D) 35000) (salary (Bitdiddle Ben) 60000) (replace (Fect Cy D) (Bitdiddle Ben)) (lisp-value < 35000 60000))
(and (salary (Hacker Alyssa P) 40000) (salary (Bitdiddle Ben) 60000) (replace (Hacker Alyssa P) (Bitdiddle Ben)) (lisp-value < 40000 60000))
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»