問題3.22
え?手続きで出来るの?と思って一瞬でも疑った自分を恥じます。
Scheme楽しいよ。楽しすぎるよ。
(define (make-queue) (let ((front-ptr '()) (rear-ptr '())) ;; public interface (define (empty-queue?) (null? front-ptr)) (define (front-queue) (if (empty-queue?) (error "empty queue") (car front-ptr))) (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 (delete-queue!) (cond ((empty-queue?) (error "empty queue")) (else (set! front-ptr (cdr front-ptr))))) (define (display-queue) (define (display-queue-internal q) (cond ((eq? q rear-ptr) (display " ") (display (car q))) (else (begin (display " ") (display (car q)) (display-queue-internal (cdr q)))))) (if (empty-queue?) (display "empty queue\n") (begin (display "(") (display-queue-internal front-ptr) (display ")\n")))) (define (dispatch m . args) (cond ((eq? m 'insert-queue!) (insert-queue! (car args))) ((eq? m 'delete-queue!) (delete-queue!)) ((eq? m 'display-queue) (display-queue)) (else (erro "hoge")))) dispatch)) ;; make-queue test (define q1 (make-queue)) (q1 'display-queue) ;; empty queue (q1 'insert-queue! 'a) (q1 'display-queue) ;;( a) (q1 'insert-queue! 'b) (q1 'display-queue) ;;( a b) (q1 'delete-queue!) (q1 'display-queue) ;;( b) (q1 'delete-queue!) (q1 'display-queue) ;; empty queue
問題3.23
まだ解いている途中なのですが、大変なことが発覚!
いつも答えあわせでお世話になっている、『計算機プログラムの構造と解釈 第二版』解答集(未完)を見ていたところ、なんと3.20以降は未完です。
つまり解答がないのです。
これからはまったくの未知領域だ。がんばります。
計算機プログラムの構造と解釈
posted with amazlet on 06.04.15
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404