层次性结构

(define (append a b)
  (if (null? a)
      b
      (cons (car a) (append (cdr a) (cons (car a) b)))))
(define nil (list))
(define (count-leaves x)
  (cond ((null? x) 0)
        ((not (pair? x)) 1)
        (else (+ (count-leaves (car x))
                 (count-leaves (cdr x))))))
;;
(define (reverse l)
  (define (reverse-iter tmp ans)
    (if (null? tmp)
        ans
        (reverse-iter (cdr tmp) (cons (car tmp) ans))))
  (reverse-iter l nil))
;2.27
(define (deep-reverse l)
  (define (deep-reverse-in tmp ans)
    (cond ((null? tmp) ans)
          ((pair? (car tmp))
           (deep-reverse-in (cdr tmp)
                            (cons (deep-reverse-in (car tmp) nil) ans)))
          (else (deep-reverse-in (cdr tmp)
                                 (cons (car tmp) ans)))))
  (deep-reverse-in l nil))
;2.28
(define (fringe t)
  (define (fringe-in tmp ans)
    (cond ((null? tmp) ans)
          ((not (pair? tmp)) (cons tmp ans))
          (else (fringe-in (car tmp) (fringe-in (cdr tmp) ans)))))
  (fringe-in t nil))
(fringe (list (list 1 (list 5 6 7)) (list 3 4) 8))
;2.29
(define (make-mobile left right)
  (cons left right))
(define (make-branch length structure)
  (cons length structure))
(define (left-branch x)
  (car x))
(define (right-branch x)
  (cdr x))
(define (branch-length x)
  (car x))
(define (branch-structure x)
  (cdr x))
(define (total-weight t)
  (if (not (pair? t))
      t
      (+ (total-weight (branch-structure (left-branch t)))
         (total-weight (branch-structure (right-branch t))))))
(define (mobile-balance t)
  (or (not (pair? t))
      (and (mobile-balance (branch-structure (left-branch t)))
           (mobile-balance (branch-structure (right-branch t)))
           (= (* (total-weight (branch-structure (left-branch t)))
                 (branch-length (left-branch t)))
              (* (total-weight (branch-structure (right-branch t)))
                 (branch-length (right-branch t)))))))
时间: 2024-08-28 18:04:16

层次性结构的相关文章

[SICP] [CH 2.2] 层次性数据和闭包性质

2.2.2 层次性结构 计算叶节点 (leaves tree) = (leaves (car tree)) + (leaves (cdr tree)), (leaves leave) = 1; ; 计算tree中叶节点数量(define (leaves tree) (cond ((null? tree) 0) ((not (pair? tree)) 1) (else (+ (leaves (car tree)) (leaves (cdr tree)))))) ; 计算叶节点的测试代码(defin

正则表达式30分钟入门教程

目录 跳过目录 本文目标 如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 网上的资源及本文参考文献 更新纪录 本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它. 如何使用本教程 最重要的是--请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内

基于ARM处理器的反汇编器软件简单设计及实现

写在前面 2012年写的,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性进行验证,对那些直接与CPU 相关的目标代码进行安全性分析: 涉及的主要内容 分析ARM处理器指令的特点,以及编译以后可执行的二进制文件代码的特征: 将二进制机器代码经过指令和数据分开模块的加工处理: 分解标识出指令代码和数据代码: 然后将指令代码反汇编并加工成易于阅读的汇编指令形式的文件: 下面给出个示例

C# 命名规范(部分)

必须严格执行的: 1.局部变量的名称要有意义,尽量用对应的英文命名,比如“用户姓名”变量,不要用aa bb cc等来命名,而要使用userName. 2.不要使用单个字母的变量,如i.n.x等.而要使用index.temp等.用于循环迭代的变量例外. 3.应该使用Pascal命名法命名方法名.属性名.类名和命名空间,且方法的命名一般将其命名为动宾短语,如 ◆ShowDialog(); ◆CreateFile(); ◆GetPath(); 4.用Camel命名法命名局部变量和方法的参数. 以上几条

【转】正则表达式30分钟入门教程

首页 | 常用正则表达式 | 正则表达式测试工具 正则表达式30分钟入门教程 版本:v2.33 (2013-1-10) 作者:deerchao 转载请注明来源 目录 跳过目录 本文目标 如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 网上的资源及本文参考文献 更新纪录 本文目标 30分钟内让你明白正则表达式是什么,

正则表达式学习(三)

零宽断言 地球人,是不是觉得这些术语名称太复杂,太难记了?我也有同感.知道有这么一种东西就行了,它叫什么,随它去吧!人若无名,便可专心练剑:物若无名,便可随意取舍-- 接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言.最好还是拿例子来说明吧: 注:断言用来声明一个应该为真的事实.正则表达式中只有当断言为真时才会继续进行匹配. (?=exp)也叫零宽度正预测先行断言,

30分钟学会正则表达式

正则表达式30分钟入门教程 版本:v2.33 (2013-1-10) 作者:deerchao 转载请注明来源 原地址:http://www.jb51.net/tools/zhengze.html#mission 目录 跳过目录 本文目标 如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 网上的资源及本文参考文献 更新

linux基础的一些常见问题总结_学习笔记

平时自己的总结(miscellaneous) oracle无法实现远程用户连接:  解决办法:       #sqlplus /nolog     SQL> connect / as sysdba    SQL> alter system set local_listener = '(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.0.2)(PORT=1521)(SID=orcl))' scope=spfile;        SQL> shutdown im

计算机程序的构造和解释笔录(1):构造过程抽象

Q: SICP是讲软件工程么? A:部分,但并非全部.主要是模块化和黑盒抽象,计算机中两大主要基本思想.SICP关心的是:"当系统复杂度爆炸时(或者在此之前),我们如何通过有效的方法和手段去控制系统的复杂度?" Q: SICP是讲编译原理么? A: 部分,另外,如同书名说描述的那样,SICP中的"编译"都是"解释",这种解释的行为,无外乎就是用一种机器的计算行为去模拟另一种机器. 一个计算机语言并不仅仅是让计算机去执行操作的一种方式,而是一种表达