SICPを読む(104) 問題 3.21 - 3.22 - キュー(2)

もうちょい。

問題 3.21

Benのわがままを聞け。

(define print-queue car)
(print-queue q) ; ()

な、消えてるだろ。データ構造がリストなんだからしょうがないじゃん。

問題 3.22

んじゃデータ構造変えてやればいいじゃないかと、次の問題へ。

(define (make-queue)
  (let* ((front-ptr '())
         (rear-ptr '())
         (empty-queue? (lambda ()
                         (null? front-ptr))))
        (lambda (m)
          (case m
                ('empty-queue? (empty-queue?))
                ('front-queue (if (empty-queue?)
                                  (error "empty.")
                                  (car front-ptr)))
                ('insert-queue! (lambda (v)
                                  (let ((new-pair (list v)))
                                       (if (empty-queue?)
                                           (set! front-ptr new-pair)
                                           (set-cdr! rear-ptr new-pair))
                                       (set! rear-ptr new-pair)
                                       front-ptr)))
                ('delete-queue! (cond ((empty-queue?) (error "empty."))
                                      (else
                                        (set! front-ptr (cdr front-ptr))
                                        front-ptr)))
                (else
                  (error "require method."))))))

案外修正点が多かった。