SICP 2.30 && 2.31square_list (树的平方映射)
来源:互联网 发布:推广淘宝优惠券挣钱 编辑:程序博客网 时间:2024/05/22 10:42
要求:有一棵树 (list 1 2 3 (list (list 4) 5) 6),将其转换为树 (1 4 9 ((16) 25) 36)
方案一:二叉递归(我根据自己的理解起得名字LOL)
> (define (square_tree tree) (cond ((null? tree) '()) ((not (pair? tree)) ((lambda (x) (* x x)) tree)) (else (cons (square_tree (car tree)) (square_tree (cdr tree))))))
方案二:子树缩放(也是我起的名字。。。),将树看成子树的序列,进行map操作
> (define (square_tree tree) (map (lambda (sub_tree) (if (pair? sub_tree) (square_tree sub_tree) ((lambda (x) (* x x)) sub_tree))) tree))
我们可以对这个函数进行更高阶的抽象,使其变成一个对树进行映射处理的普适过程,以第二个方法为例:
> (define (square_tree tree f) (map (lambda (sub_tree) (if (pair? sub_tree) (square_tree sub_tree) (f sub_tree))) tree))
其中f为要进行映射的函数
0 0
- SICP 2.30 && 2.31square_list (树的平方映射)
- SICP 2.2 嵌套映射
- 1的平方-2的平方+3的平方-4的平方...-100的平方,结果
- sicp 习题2.31
- sicp 习题2.30
- SICP 习题 (2.31)解题总结 : 通用的Square-Tree
- sicp
- SICP
- SICP 2.28 遍历二叉树的叶子节点
- 平方数的构建
- html平方的写法
- 平方数的判断
- 平方数的研究
- 数值的平方
- x的平方
- 一个数的平方
- 元素的平方
- SICP习题1.6的解答
- Linux的进程优先级 NI 和 PR
- 算法训练 6-1 递归求二项式系数值
- vim-6 执行shell命令、文件另存为、合并文件和打开多个文件
- win7下安装ubutun双系统
- IEEE浮点数表示
- SICP 2.30 && 2.31square_list (树的平方映射)
- 2017.1.13训练总结
- POJ 1442 Black Box(第k次询问第k小,两个堆)
- Mysql [ERROR] /usr/sbin/mysqld: Can't create/write to file '/xxx/mysqld/mysql.pid' (Errcode: 2) 处理
- MyBatis分页插件的配置
- two
- linux cut 的用法
- java并发编程(十二)----(JUC原子类)数组类型介绍
- Android 蓝牙4.0(BLE)开发实现对蓝牙的写入数据和读取数据