[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))
时间: 2024-11-01 14:00:31

[SICP] [CH 2.2] 层次性数据和闭包性质的相关文章

【SICP归纳】3 层次性数据和符号数据

在学习书中第二章的时候有个问题一直让我很困扰,那就是2.2.4节的实例,因为没法输出书中华丽的图案,只能是一对英文字母.这在几个月前浅浅的学了一会Common Lisp的时候也是如此,当时看到书中有个实例是书中输出了很赞的线条,而我只会输出一堆点.后来才知道让Lisp输出图形化界面是更高层次的工程,暂时还未有时间来学习,先把SICP搞定. 上一篇博文中我们谈到了复合数据,关于它有两个重点.第一,数据抽象,这也就意味着你可以隔离那些数据对象.第二,在Lisp中有个特殊的方式能够黏住一些东西,它就是

nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 .而近期会加入的文章将主要是算法和Android.只是其他内容也会继续完好. About the Author 独立 Windows App 和

NoMasp博客导读

简介 博客简介 您能看到这篇博客是我的荣幸,本博客会定期持续更新.欢迎您的关注和留言. 个人简介 本科二年级,多年C#.Lisp编程经验,Windows App开发者,了解C.C++.HTML5等语言.密切关注人工智能.图像处理.云计算等,现阶段专攻Windows App开发. 博客导航 Algorithm 暂无 Amazing 暂无 Books 内容:2015读书计划及进度 <卡耐基写给男人的12堂财商课>摘录 C 暂无 CSharp C#相关的总结等. WPF和WinRT中的导航问题 文件

《计算机程序的构造和解释(第2版)》【PDF】下载

<计算机程序的构造和解释(第2版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382255 内容简介 <计算机程序的构造和解释(原书第2版)>1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版.在过去的二十多年里,<计算机程序的构造和解释(原书第2版)>对于计算机科学的教育计划产生了深刻的影响.第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器.

PHP Curl模拟登录并抓取数据

使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据.具体实现的流程如下(个人总结): 1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息: (1)登录页面的地址: (2)验证码的地址: (3)登录表单需要提交的各个字段的名称和提交方式: (4)登录表单提交的地址: (5)另外要需要知道要抓取的数据所在的地址. 2. 获取cookie并存储(针对使用cookie文件的网站): $login_url = 'http://www.xxxxx

php如何以post形式发送xm并返回xmll数据

post的数据为xml字符串,通过 $xml = simplexml_load_string($post_data);转换成xml对象 $header[] = "Content-type: text/xml";//定义content-type为xml $post_data = '<?xml version="1.0" encoding="UTF-8"?>'; $post_data .= '<param>'; $post_d

http_post_data发送数据的获取方式

private function http_get_data($url){ $ch = curl_init($url) ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回 $data = curl_exec($ch) ; if (curl_errno(

curl提交表单返回数据的封装

/**  * 通过curl提交表单获取数据  * @param array $post 需要提交的数据  * @param string $url 需要提交到的地址  * @return array $is_success 返回的数据  */ function getInfoByCurl($post,$url){     //初始化一个curl会话,返回一个curl句柄,供curl_setopt(), curl_exec()和curl_close() 函数使用     $ch=curl_init

转 PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据) 通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便),curl_setopt 是php的一个扩展库 使用条件:需要在php.ini 中配置开启.(PHP 4 >= 4.0.2)       //取消下面的注释 extension=php_curl.dll 在Linux下面,需要重新编译PHP了,编译时,你需要打开编译参数——在configure命令上加上“–with-curl” 参数. 1.