【SICP读书笔记(四)】练习2.27 --- 表序列reverse的扩展:树结构的deep-reverse

题目要求是,修改练习2.18所做的reverse过程,得到一个deep-reverse过程。它以一个表为参数,返回另一个表作为值,结果表中的元素反转过来,其中的子树也反转。

例如:

(define x (list (list 1 2) (list 3 4)))

x

((1 2) (3 4))

(reverse x)

((3 4) (1 2))

(deep-reverse x)

((4 3) (2 1))

方法也挺简单,思路跟reverse过程一样,用一个辅助的过程来完成任务,辅助过程带有一个空表,碰到元素就添加到表头,如果元素也是个list就开始递归。

所有,最终的关键是要有“闭包思维”。这个词是不是比递归的逼格高一点?lol

(define (deep-reverse tree)
    (deep-reverse-help tree ()))

(define (deep-reverse-help tar res)
    (if (null? tar)
         res
         (if (pair? (car tar))
             (deep-reverse-help (cdr tar) (cons (deep-reverse-help (car tar) () ) res ))
             (deep-reverse-help (cdr tar) (cons (car tar) res)))))

  

时间: 2024-08-28 10:39:36

【SICP读书笔记(四)】练习2.27 --- 表序列reverse的扩展:树结构的deep-reverse的相关文章

R实战读书笔记四

第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下. 一图胜千字,人们从视觉层更易获取和理解信息. 图形工作 R具有非常强大的绘图功能,看下面代码. > attach(mtcars) > plot(wt, mpg) > abline(lm(mpg~wt)) > title("Regression of MPG on Weight") > detach(m

《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

一.网站性能测试 (1)性能测试指标:①响应时间:②并发数:③吞吐量:④性能计数器: (2)性能测试方法:①性能测试:②负载测试:③压力测试:④稳定性测试: (3)性能优化策略: ①性能分析:检查请求处理各个环节的日志,分析哪个环节响应时间不合理,检查监控数据分析影响性能的因素: ②性能优化:Web前端优化,应用服务器优化,存储服务器优化: 二.Web前端性能优化 (1)浏览器访问优化: ①减少http请求:因为http是无状态的,每次请求的开销都比较昂贵(需要建立通信链路.进行数据传输,而服务

悟道—位IT高管20年的职场心经(读书笔记四)

悟道--一位IT高管20年的职场心经 第四章 人情练达即文章 "问世间情为何物,直教人生死相许" 那是说的爱情. 职场中的人情实在没那么浪漫, 很多时候是冷冰冰的, 但是你必须去面对, 以积极的.正面的心态去面对. 不但要面对,还要苦心经营. 1.1  谁都别惯着:下属不能惯 学会安排事情,分担事情. 1.2  谁都别惯着:老板不能惯 怎么样去和不同性格的老板交流,老板也有他自己的不足的地方,在这种情况下,最好是自己有自己的解决问题的方法. 1.3  谁都别惯着:客户不能惯 对客户,有

《高效能程序员的修炼》读书笔记四

第一章第三节:如何培养写作习惯 -------------------------------- 我个人一直坚信要成为一名优秀的程序员,其实和写代码是没有多大关系的(刚好本书作者也是这样的想法).当然,作为一名程序员的话,具有一定水平的技术能力还是需要的.但,个人觉得更重要的是良好地沟通技巧. 本书作者的合伙人Joel Spolsky有过这样一段话: 杰出的程序员跟勉强过得去的程序员之间的差别,不在于他们掌握了多少种编程语言,也不在于他们谁更擅长Python或Java.真正的关键是,他们能不能把

《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件

前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石 <淘宝技术这十年>读书笔记 (三).创造技术TFS和Tair 这篇文章主要讲述分布式时代和中间件相关知识,包括服务化.HSF.Notify和TDDL.同时里面有我们经常遇见的编码错误等相关问题,希望文章对你有所帮助! 一. 分布式时代 1.服务化 在系统发展的过程中,架构

how tomcat works 读书笔记四 tomcat的默认连接器

其实在第三章,就已经有了连接器的样子了,不过那只是一个学习工具,在这一章我们会开始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足以下几个要求 1 实现org.apache.cataline.Connector接口 2 负责创建实现了org.apache.cataline.Request接口的request对象 3 负责创建实现了org.apache.cataline.Response接口的response对象 这里默认的连接器的原理很简单,就是等待http请求,创建re

《javascript语言精粹》读书笔记四

第七章 正则表达式 正则表达式是处理字符串的最强道具,没有之一. 通过正则表达式,我们可以非常简便的对字符串进行各种操作,这里就对此就不对这章进行总结,之后对正则表达式进行一次专门的总结. 第八章 方法 '+'运算符在较新的浏览器中,进行过较多的优化,会对该运算符进行优化,比array.join函数运行速度要快的多. array Array.concat和Array.slice函数可以生成新的数组. Array.shift函数通常比pop速度要快. 在使用Array.sort回调函数中,默认会将

【SICP读书笔记(三)】练习2.18 --- 表序列的reverse方法

来自练习2.18 请定义出过程reverse,它以一个表为参数,返回的表中所包含的元素与参数表相同,但排列顺序与参数表相反: (reverse (list 1 4 9 16 25)) (25 16 9 4 1) 有几个难点: 0.不能采用(cons (reverse (cdr lst) ) (car lst))的方式.在cons过程中,如果表参数在前,那么出来的就是嵌套表而不是单独的表. 1.不能采用之前实现的append过程,例如(append (reverse (cdr lst)) (car

JavaScript DOM编程艺术读书笔记(四)

第十章 实现动画效果 var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; 第一个参数是个字符串,所以需要单引号!!! move_elem = setTimeout(repeat,interval); //复制给一个变量,当我们想取消一个正在排队等待执行的函数,可以用clearTimeout(mov