2008. 8. 11.

연습문제 3.14

mystery는 list의 값을 역으로 만드는 함수이다.

v -> (a)
w -> (d c b a)

가 된다.

연습문제 3.13

Z의 얼개는 다음과 같다..

  +------------------+
  |                       |
  v                      |
  * | * -> * | * -> * | *
  |          |          |
  v         v        v
  a         b        c


따라서 (last-pair z)는 무한 루프에 빠진다.

연습문제 3.12

append 연산을 끝마친 후 x의 cdr은

-> (b )

이고

append! 연산을 끝마친 후 x의 cdr은

-> (b c d)

이다.

연습문제 3.12

append 연산을 끝마친 후 x의 cdr은

-> (b )

이고

append! 연산을 끝마친 후 x의 cdr은

-> (b c d)

이다.

2008. 8. 7.

연습문제 3.8

(define f
  (let ((inner-v 1))
    (lambda (v)
      (begin
        (set! inner-v (* inner-v v))
        inner-v))))


연습문제 3.7

(define (make-joint account passwd newpasswd)
  (define (dispatch pass m)
    (if (?eq pass newpasswd)
        (account passwd m)
        (else (error "Bad passwd when joint"))))
  dispatch)


연습문제 3.6

(define (rand command)
(cond ((eq? command'generate) (random))
((eq? command 'reset)
(lambda (new)
(random-seed new)))
(else
(error "Bad command -- " command))))