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)