読者です 読者をやめる 読者になる 読者になる

yy_taroのとりとめのない落書き

メインフレームの導入・設計・構築ができるぐらいの知識があったりする。

SICP始めました 70

SICP幻の七十日目

昨日は飲み会で帰ってきてそのまま寝てしまいました。

かなりアウェイな飲み会だったので若干退屈でした。

次もやるらしいですが参加せず家でSICPを進めようと思っています。

さて気を取り直して今日は進めます。

問題3.21

 これは難しそうだと意義込んでいたものの

(define (print-queue queue)
 (car queue))

問題3.22

 こっちはかなり大作になった。

(define (make-queue)
 (let ((front-ptr '())
        (rear-ptr '()))
   (define (set-front-ptr! item)
    (set! front-ptr item))
   (define (set-rear-ptr! item)
    (set! rear-ptr item))
   (define (empty-queue?)
    (null? front-ptr))
   (define (front-queue queue)
    (if (empty-queue? queue)
      (error "FRONT called with an empty queue" queue)
      (car (front-ptr queue))))
   (define (insert-queue! item)
     (let ((new-pair (cons item '())))
      (cond ((empty-queue?)
        (set-front-ptr! new-pair)
        (set-rear-ptr! new-pair))
      (else
        (set-cdr! rear-ptr new-pair)
        (set-rear-ptr! new-pair)))))
   (define (print-queue) front-ptr)
   (define (delete-queue! queue)
     (cond ((empty-queue? queue)
       (error "DELETE! called with an empty queue" queue))
     (else
       (set-front-ptr! (cdr front-ptr)))))
   (define (dispach m)
    (cond ((eq? m 'insert-queue!) insert-queue!)
          ((eq? m 'delete-queue!) delete-queue!)
          ((eq? m 'print-queue) print-queue)
          (else
            (error "Undefined operation -- MAKE-QUEUE" m))))
   dispach))

今日はここまで

計算機プログラムの構造と解釈[第2版]

計算機プログラムの構造と解釈[第2版]