SICP 4.4.1 Ex. 4.55

  • 投稿日:
  • カテゴリ:

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)