码迷,mamicode.com
首页 > 其他好文 > 详细

SICP 习题 (2.18) 解题总结:反转列表

时间:2014-12-25 01:30:48      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

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) ‘()))))



SICP 习题 (2.18) 解题总结:反转列表

标签:

原文地址:http://blog.csdn.net/keyboardota/article/details/39440253

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!