Ex. 4.55
a. (supervisor ? (Bitdiddle Ben)) b. (job ?x (accounting . ?)) ← ドットのまわりの空白は必須。 c. (address ?x (Slumerville . ?)) ← ?が2つあるときは区別するためにパターン変数が必要
質問システムっても、SQLの劣化版のような気がするが、動かしてみると意外とおもしろい。
http://mitpress.mit.edu/sicp/code/index.html に ch4-query.scm のソースがある。
ch4-query.scm を gosh で動かすには少し変更が必要。
;;;ファイルの先頭に追加
(define false #f)
(define true #t)
(define user-initial-environment '()) ;; 2009-11-27追加 lisp-value で使う
;;p188脚注
(define the-empty-stream '())
;;; p.189
(define-syntax cons-stream
(syntax-rules ()
((_ a b) (cons a (delay b)))))
;;p188
(define (stream-null? x) (null? x))
;;p189
(define (stream-car x) (car x))
(define (stream-cdr x) (force (cdr x)))
(define (list->stream l)
(if (null? l)
the-empty-stream
(cons-stream (car l) (list->stream (cdr l))) )) ;;; http://inst.eecs.berkeley.edu/~instcd/inst-cd/classes/cs61a/drscheme/berkeley.ssから拾ってきた
(define (extend variable value frame)
(cons (make-binding variable value) frame)) ;; goshのextendと混乱するので先に上書きする。
・・・ch4-query.scmの本文・・・
;;;最後に追加
(initialize-data-base microshaft-data-base)
(query-driver-loop)