이번 문제는 상태가 있는 프로시저로 queue를 구현하는 문제입니다.
상태가 있는 프로시저가 무엇인지 기억이 나지 않아 앞에 것을 공부하였습니다.OTL...

잘 되는군요.^^
그리 심하게 어렵지 않았던 것으로 기억합니다.
(사실 이 문제는 어제 풀었으나 너무 피곤해서 잠을 일찍 잔터라 오늘 포스팅합니다.
따라서 무엇을 조심해야하는지 전혀 기억이 나지 않습니다.OTL....)
참조
해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 345
; exercise 3.22
(define (make-queue)
(let ((front-ptr null) ; 처음에는 빈 큐이므로 null
(rear-ptr null)) ; 처음에는 빈 큐이므로 null
; insert-queue 정의
(define (insert-queue item)
(let ((new-pair (cons item '())))
(cond ((null? front-ptr)
(set! front-ptr new-pair)
(set! rear-ptr new-pair))
(else
(set-cdr! rear-ptr new-pair)
(set! rear-ptr new-pair)))))
; delete-queue 정의
(define (delete-queue)
(cond ((null? front-ptr)
(error "DELETE! called with an empty queue"))
(else
(set! front-ptr (cdr front-ptr)))))
; print-queue 정의
(define (print-queue)
(define (print-iter q)
(cond ((null? q) null)
(else (display (car q))
(display " ")
(print-iter (cdr q)))))
(print-iter front-ptr)
(newline))
; dispatch 정의
(define (dispatch m)
(cond ((eq? m 'empty-queue?)
(null? front-ptr))
((eq? m 'front-queue?)
(if (null? front-ptr)
(error "FRONT called with an empty queue")
(car front-ptr)))
((eq? m 'insert-queue!) insert-queue)
((eq? m 'delete-queue!) (delete-queue))
((eq? m 'print-queue) (print-queue))))
dispatch))
; execute
(define q1 (make-queue))
(q1 'print-queue)
((q1 'insert-queue!) 'a)
(q1 'print-queue)
((q1 'insert-queue!) 'b)
(q1 'print-queue)
(q1 'delete-queue!)
(q1 'print-queue)
(q1 'delete-queue!)
(q1 'print-queue)
- SICP Exercise 연습문제 3.25 (0)2008/07/06
- SICP Exercise 연습문제 3.24 (0)2008/07/06
- SICP Exercise 연습문제 3.23 (0)2008/07/05
- SICP Exercise 연습문제 3.22 (0)2008/07/05
- SICP Exercise 연습문제 3.21 (0)2008/07/04
- SICP Exercise 연습문제 3.20 (0)2008/07/04
- SICP Exercise 연습문제 3.16 - 수정 (0)2008/07/03
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.








댓글을 달아 주세요