« はてなメモ | Main | SICP 4.4.4.2 The Evaluator Simple queries »

2007.09.17

SICP 4.4.4.5 Maintaining the Data Base

一つ分かった。

assertionとruleはそれぞれ、グローバル変数のTHE-ASSERTIONSとTHE-RULESにstreamとして保存される。
両方ともdriver-loopから(assert! ・・・・)で追加できる。

データベースを初期化するには、こんな感じでassertionとruleのリストを作る。

(define microshaft-data-base
'((address (Bitdiddle Ben) (Slumerville (Ridge Road) 10))
 (job (Bitdiddle Ben) (computer wizard))
 (salary (Bitdiddle Ben) 60000)

 (address (Hacker Alyssa P) (Cambridge (Mass Ave) 78))

省略

 (can-do-job (computer wizard) (computer programmer))
 (can-do-job (computer wizard) (computer technician))

省略

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

 (rule (outranked-by ?staff-person ?boss)
  (or (supervisor ?staff-person ?boss)
   (and (supervisor ?staff-person ?middle-manager)
      (outranked-by ?middle-manager ?boss))))
))

このリストを、add-rule-or-assertionに順に渡せばOK。

(define (initial-database)
 (map add-rule-or-assertion! microshaft-data-base))

(initial-database)

上手くassertionが入っているかの確認は、THE-ASSERTIONSを順に評価すればよい。

gosh> THE-ASSERTIONS
((can-do-job (administration secretary) (administration big wheel)) . #)
gosh> ((cdr THE-ASSERTIONS))
((can-do-job (computer programmer) (computer programmer trainee)) . #)
gosh>

initial-databaseで登録したassertionが、おしりから順に取り出せる。ruleも同じ。

Exercise 4.70
add-assertion!で、streamをいったんletでold-assertionsに束縛するのはなぜか?

(add-assertion! '(can-do-job (computer wizard) (computer technician)))
(add-assertion! '(can-do-job (computer wizard) (computer technician)))

みたいに、同じassertionを2回追加すると、順にストリームから取り出せなくなる。

|

« はてなメモ | Main | SICP 4.4.4.2 The Evaluator Simple queries »

Comments

もう一つ分かった。
僕はStreamが分かっていない。
flatten-streamとかが、どういう動きをするのか全然説明できない。

3章に戻れ!

Posted by: なつたん | 2007.09.17 at 12:21 PM

Post a comment



(Not displayed with comment.)




TrackBack

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

Listed below are links to weblogs that reference SICP 4.4.4.5 Maintaining the Data Base:

« はてなメモ | Main | SICP 4.4.4.2 The Evaluator Simple queries »