首页 > 代码库 > [SICP] [CH 2.2] 层次性数据和闭包性质
[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))))))
; 计算叶节点的测试代码
(define x (cons (list 1 2) (list 3 4))) ; ((1 2) 3 4))(length x) ; 3(leaves x) ; 4(list x x) ; (((1 2) 3 4) ((1 2) 3 4))(length (list x x)) ; 2(leaves (list x x)) ; 8
Q 2.28
题目:给出过程定义fringe, 以一个树为参数, 返回一个由这棵树中所有叶节点组成的表, 从左到右排列。
思路:用到了一个全局变量记录结果,遍历树,将所有叶节点append到结果上。
(define (fringe tree) (define (iter tree result) (cond ((null? tree) result) ; 当前结点为空时,返回result ((leaf? tree) (append result (list tree))) ; 当前节点为叶时,封装为list,append至结果 (else (iter (cdr tree) (iter (car tree) result))))) ; 当前节点为根结点时,将右结点append到左结点上 (iter tree null))
[SICP] [CH 2.2] 层次性数据和闭包性质
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。