练习2.27
又是修改程序的题目,要求我们写出的deep-reverse函数要将表中的元素也反转过来,这其中应该要用到递归来实现吧。
(define (deep-reverse tree)
(cond ((null? tree) ‘())
((not (pair? tree)) tree)
(else (reverse (list (deep-reverse(car tree))
(deep-reverse (cadrtree)))))))
但是对于((1 2) (3 4) (5 6))这种,上面的函数就无法按我们的刚才的想法来返回了。它的返回值会是(4 3) (2 1)),而我们要的返回值则是((6 5) (4 3) (2 1))。因此要对程序进行修改。
(define (deep-reverse lst)
(define (iter remainder-items result)
(if (null? remainder-items)
result
(iter (cdr remainder-items
(cons (if (pair? (car remainder-items))
(deep-reverse (car remainder-items))
(car remainder-items))
result))))
(iter lst ‘()))