« SICP 4.4.4.5 Maintaining the Data Base | Main | 本好き »

2007.09.17

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で配布します。

|

« SICP 4.4.4.5 Maintaining the Data Base | Main | 本好き »

Comments

自分用メモ
and/orが動くバージョン
http://homepage3.nifty.com/~Natsutan/study/SICP/logic.lzh

このあたりで満足して、5章に入ろう。

Posted by: なつたん | 2007.09.17 at 06:06 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16476484

Listed below are links to weblogs that reference SICP 4.4.4.2 The Evaluator Simple queries:

« SICP 4.4.4.5 Maintaining the Data Base | Main | 本好き »