開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力, オブジェクトおよび状態)、3.3(可変データでのモデル化)、3.3.2(キューの表現)の問題 3.22を解いてみる。
その他参考書籍
問題3.22
コード(BBEdit)
sample.scm
(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)
(if (empty-queue?)
(error "FRONT called with an empty queue" front-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)
(newline)
(display "空っぽ")
make-queue)
(else
(newline)
(display "空っぽではない")
(set-cdr! rear-ptr new-pair)
(set-rear-ptr! new-pair)
make-queue))))
(define (delete-queue!)
(cond ((empty-queue?)
(error "DELETE! called with an empty queue" delete-queue!))
(else
(set-front-ptr! (cdr front-ptr))
make-queue)))
(define (print-queue) front-ptr)
(define (dispatch 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))))
dispatch))
(define q1 (make-queue))
入出力結果(Terminal, REPL(Read, Eval, Print, Loop))
1 ]=> ((q1 'print-queue)) ;Value: () 1 ]=> ((q1 'insert-queue!) 'a) ;Value 2: #[compound-procedure 2 make-queue] 1 ]=> ((q1 'print-queue)) ;Value 3: (a) 1 ]=> ((q1 'insert-queue!) 'b) ;Value 2: #[compound-procedure 2 make-queue] 1 ]=> ((q1 'print-queue)) ;Value 3: (a b) 1 ]=> ((q1 'delete-queue!)) ;Value 2: #[compound-procedure 2 make-queue] 1 ]=> ((q1 'print-queue)) ;Value 4: (b) 1 ]=> ((q1 'delete-queue!)) ;Value 2: #[compound-procedure 2 make-queue] 1 ]=> ((q1 'print-queue)) ;Value: ()
0 コメント:
コメントを投稿