【Scheme】树结构
将表作为序列的表示方式,可以推广到元素本身也是序列的序列。例如,我们可以认为对象((1 2) 3 4)是通过(cons (list 1 2) (list 3 4))构造出来的。
这个表包含三个项,其中第一项本身又是一个表(1 2)。因此可以将其看做一个树形结构:根为((1 2) 3 4),有3个子树分别为(1 2)、3、4。 因3、4不再具有子树,故称它们为叶子节点。
同理(1 2)节点有1、2两个叶子节点。如下图所示:

以下是树的操作
计算叶子数:
(define (count-leaves tree)
(cond ((null? tree) 0)
((not (pair? tree)) 1)
(else (+ (count-leaves (car tree))
(count-leaves (cdr tree))))))
深度反转:
(define (deep-reverse2 items)
(cond ((null? items) null)
((not (pair? items)) items)
(else (append (deep-reverse2 (cdr items)) (list (deep-reverse2 (car items))))))
叶子从左向右输出
(define (fringe items)
(cond ((null? items) null)
((not (pair? items)) (list items))
(else (append (fringe (car items)) (fringe (cdr items))))))
对树的映射
方法1:
(define (tree-map proc tree)
(cond ((null? tree) null)
((not (pair? tree)) (proc tree));叶子直接返回
(else (cons (tree-map proc (car tree));左子树
(tree-map proc (cdr tree))))));右子树
方法2:
(define (tree-map2 proc tree)
(map (lambda (sub-tree);对tree中的每一个子树
(if (pair? sub-tree);如果是序对
(tree-map2 proc sub-tree);递归对该子树执行map
(proc sub-tree))) tree));返回叶子
【Scheme】树结构的更多相关文章
- Partition:Partiton Scheme是否指定Next Used?
在SQL Server中,为Partition Scheme多次指定Next Used,不会出错,最后一次指定的FileGroup是Partition Scheme的Next Used,建议,在执行P ...
- Android业务组件化之URL Scheme使用
前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...
- react+redux教程(五)异步、单一state树结构、componentWillReceiveProps
今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...
- iOS - URL Scheme 操作
推荐JLRoutes路由跳转 NSScanner 在寻找更加灵活的页面跳转和通知,我遇见了JLRoutes,从而学习使用URL Scheme来定义界面入口.以前从来没有使用过,不过很多大厂和流行的框架 ...
- 自定义 URL Scheme 完全指南
本文由 Migrant 翻译自 The Complete Tutorial on iOS/iPhone Custom URL Schemes,转载请注明出处. 注意: 自从自定义 URL 的引入,本文 ...
- JS魔法堂:Data URI Scheme介绍
一.前言 上周五公司内部的Any Topic Conf.上我和同事们分享了这个主题,有同事说这个有用,有同事说这个没啥用,后来还延伸到网站性能的话题上,大家讨论的激烈程度让我觉得这次选题还不错.本篇先 ...
- CSS魔法堂:小结一下Box Model与Positioning Scheme
前言 对于Box Model和Positioning Scheme中3种定位模式的细节,已经通过以下几篇文章记录了我对其的理解和思考. <CSS魔法堂:重新认识Box Model.IFC.B ...
- Project、Target、Workspace and Scheme
前言 今天有人问我Target和Project是什么关系?额...学习iOS开发都知道Target和Project的关系.这里我就简单的做了一个总结,而且加入的Scheme和Workspace.如果不 ...
- 自定义 URL Scheme 完全指南(转载)
iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...
随机推荐
- 1. apache如何启动
进入apache安装目录/bin/底下,用命令:./apachectl start 启动
- 输出1到n以内的素数
package cn.lhj.learn; /** * 输出1~n以内的素数 * * @author lhj * */ public class TestSuShu { public static v ...
- 复习 HTML
1.<b></b>:加粗 <i></b>:斜体 <u></u>:文字下划线 <s></s>:文字删除线 ...
- sql 日期格式
select CONVERT(varchar(10), getDate(),121) --不要时间2002-01-01 select CONVERT(varchar(10), getDate(),12 ...
- 浅谈 volatile 的实现原理
在并发编程中我们一般都会遇到这三个基本概念:原子性.可见性.有序性.我们稍微看下volatile 原子性 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行. ...
- python 可迭代对象与迭代器
生成器函数的工作原理只要 Python 函数的定义体中有 yield 关键字, 该函数就是生成器函数. 调用生成器函数时, 会返回一个生成器对象. 也就是说, 生成器函数是生成器工厂. 调用生成器函数 ...
- jquery接触初级-----ajax 之:jquery_ajax 方法
1. $.get() 方法: 格式:$.get( url,[,data],[,callback],[,type] ); data: 采用键值对的方式存储于对象中; callback: 载入成功时(当 ...
- 1037C_ Equalize(字符串)
modify 改变 C. Equalize time limit per test 1 second memory limit per test 256 megabytes input standar ...
- upupw
https://sourceforge.net/projects/upupw/files/ANK/
- Spring STS Call Hierarchy 查找不到被调用的信息
今天使用Spring的STS的时候,发现Call Hierarchy无法使用,很奇怪,发现问题出现在同一个工作区间里,如果工作区间不在此工作区间,发现还是可以找到被调用的信息的.当时在网上找也没找到 ...