首页 > 代码库 > SICP 习题 (2.18) 解题总结:反转列表
SICP 习题 (2.18) 解题总结:反转列表
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) 解题总结:反转列表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。