問題 2.27

(define (reverse items)
  (define (reverse-iter i p)
    (if (null? i)
        p
        (reverse-iter (cdr i) (cons (car i) p))))
  (reverse-iter items null))

(define (deep-reverse items)
  (define (reverse-iter i p)
    (if (null? i) p
        (reverse-iter 
         (cdr i)
         (cons (if (pair? (car i))
                    (reverse-iter (car i) null)
                    (car i))
                p))))
  (reverse-iter items null))


(deep-reverse (list (list 1 2) (list 3 4)))
;-> ((4 3) (2 1))

(deep-reverse (list (list 1 (list 2 3) 4 (list 5 6 (list 7 8) 9) 10) (list 11 12) 13))
;-> (13 (12 11) (10 (9 (8 7) 6 5) 4 (3 2) 1))

;;別解
(define (deep-reverse x)
   (if (list? x)
     (reverse (map deep-reverse x))
     x))