SICP 4.4.4.2 The Evaluator Simple queries
一つでもわかると、そこが取っかかりになってなんとか追えるようになってきた。
データベースの初期化ができていそうなので、Simple queryに挑戦。
(job ?x (computer programmer)
入力されたqueryは、?が分解される。
(query-syntax-process '(job ?x (computer programmer)))
=> (job (? x) (computer programmer))
これを忘れていて、迷宮にさまよい込んでしまった。
streamも少し修正して、ここまで動いた。
;;; Query input:
(job ?x (computer wizard))
;;; Query results:
(job (Bitdiddle Ben) (computer wizard))
;;; Query input:
(salary (Bitdiddle Ben) ?x)
;;; Query results:
(salary (Bitdiddle Ben) 60000)
2つめ以降の問い合わせができていない。
;;; Query input:
(job ?x (computer programmer))
;;; Query results:
とりあえず、効率を犠牲にして、fetch-assertionsを全てのassertionを返す事で対応した。
(define (fetch-assertions pattern frame)
(get-all-assertions))
;;; Query input:
(job ?x (computer wizard))
;;; Query results:
(job (Bitdiddle Ben) (computer wizard))
;;; Query input:
(salary (Bitdiddle Ben) ?x)
;;; Query results:
(salary (Bitdiddle Ben) 60000)
;;; Query input:
(job ?x (computer programmer))
;;; Query results:
(job (Fect Cy D) (computer programmer))
(job (Hacker Alyssa P) (computer programmer))
;;; Query input:
ktkr!
Exercise 4.55.
a. all people supervised by Ben Bitdiddle;
(supervisor ?x (Bitdiddle Ben))
;;; Query results:
(supervisor (Tweakit Lem E) (Bitdiddle Ben))
(supervisor (Fect Cy D) (Bitdiddle Ben))
(supervisor (Hacker Alyssa P) (Bitdiddle Ben))
b. the names and jobs of all people in the accounting division;
(job ?x (accounting . ?y))
;;; Query results:
(job (Cratchet Robert) (accounting scrivener))
(job (Scrooge Eben) (accounting chief accountant))
c. the names and addresses of all people who live in Slumerville.
(address ?x (Slumerville ?y ?z))
;;; Query results:
(address (Aull DeWitt) (Slumerville (Onion Square) 5))
(address (Reasoner Louis) (Slumerville (Pine Tree Road) 80))
(address (Bitdiddle Ben) (Slumerville (Ridge Road) 10))
ここまで動くソースはここ
put-get.scmは拾い物ですが、どこから入手したのかすっかり忘れてしまったので、as-isで配布します。
The comments to this entry are closed.


Comments
自分用メモ
and/orが動くバージョン
http://homepage3.nifty.com/~Natsutan/study/SICP/logic.lzh
このあたりで満足して、5章に入ろう。
Posted by: なつたん | 2007.09.17 06:06 PM