标签:
SICP 习题 2.18 要求我们定义一个过程名叫reverse,可以将一个list反转过来。
比如 (reverse (list 1 4 9 16 25)) 的结果是:
(25 16 9 4 1)
这道题和之前的2.17有相似之处,都是对list进行遍历,然后做相应处理。不过2.17比较简单,遍历到最后面返回最后的元素就好了,2.18复杂一点,需要在遍历之后将list元素反向组装起来。
我们可以按以前的思路,通过递归来描述整个过程。
其实,(reverse (list 1 4 9 16 25))可以表示为
(append (reverse (list 4 9 16 25)) 1)
如此可以一直递归,直到reverse的参数只有一个元素为止。
对应的代码如下:
(define (reverse input-list) (if (null? (cdr input-list)) input-list (append (reverse (cdr input-list)) (cons (car input-list) ‘()))))
标签:
原文地址:http://blog.csdn.net/keyboardota/article/details/39440253