SICP 习题 2.27 又开始有些难度了,题目要求我们实现reverse的升级版deep-reverse,就是不仅要将一个列表的元素顺序倒过来,还要将列表中所有子列表的元素也倒过来。
想清楚思路以后也不算太难,其实就是在对所有元素进行倒转的过程中加多一个判断,如果正在处理的元素是一个列表,则对该列表递归调用deep-reverse过程,如果正在处理的元素是一个简单的元素则直接返回该元素。
我的代码如下:
(define (deep-reverse input-list)
(if (null? input-list)
'()
(append (deep-reverse (cdr input-list))
(if (list? (car input-list))
(list (deep-reverse (car input-list)))
(list (car input-list))))))