【SICP练习】57 练习2.27
2015-02-22 13:51
162 查看
练习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 ‘()))
练习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 ‘()))
相关文章推荐
- 【SICP练习】57 练习2.27
- SICP练习1.6的解答
- 【SICP练习】71 练习2.42
- 【SICP练习】108 练习3.21
- 【SICP练习】86 练习2.58
- 【SICP练习】145 练习4.1
- 【SICP练习】47 练习2.6
- 【SICP练习】74 练习2.45
- 【SICP练习】94 练习2.67
- 【SICP练习】41 练习1.46
- SICP-练习2.17
- 【SICP练习】8 练习1.12
- 【SICP练习】17 练习1.23
- SICP 练习1.16
- 【SICP练习】29 练习1.35
- 【SICP练习】46 练习2.5
- 【SICP练习】54 练习2.22
- 【SICP练习】71 练习2.42
- SICP 练习1.30 将sum改为线性递归
- 【SICP练习】86 练习2.58