sicp 2.27

Exercise 2.27.  Modify your reverse procedure of exercise 2.18 to produce a deep-reverse procedure that takes a list as argument and returns as its value the list with its elements reversed and with all sublists deep-reversed as well. For example,

 

 

(define x (list (list 1 2) (list 3 4)))

x
((1 2) (3 4))

(reverse x)
((3 4) (1 2))

(deep-reverse x)
((4 3) (2 1))

 

 

(define (reverse items)
  (if (null? items)
      '()
      (append (reverse (cdr items)) (list (car items)))))

(define (deep-reverse items)
  (if (null? items)
      '()
      (if (list? (car items))
          (append (deep-reverse (cdr items)) (list (deep-reverse (car items))))
          (append (deep-reverse (cdr items)) (list (car items))))))

(define x (list (list 1 2) (list 3 4)))
(reverse x)
(deep-reverse x)

 

 

 

((3 4) (1 2))

((4 3) (2 1))

你可能感兴趣的:(SICP)