《sicp》模块化程序设计 笔记
《sicp》模块化程序设计
2.2.3 序列作为一种约定界面 学习笔记
这节中,讲述了一种模块化的程序设计思想,也就是将程序设计为如同信号处理过程一样,采用级联的方式将程序各个部分组合在一起,程序的每一部分对应于一个处理过程,并通过约定的界面将程序各个部分连接在一起.在本节中将序列作为一种约定界面.
实例
给定自然数n,找到所有的有序队i和j (i,j小于等于n大于等于0) ,其中i小于j , 使得i+j为素数.
分析
如采用模块化设计,可以将程序分为以下几个部分
1.列出所有的有序对,并用序列组织起来
2.过滤掉序列中不满足和为素数的有序对.
3.将序列中每个序队的和添加进序对组成三元组,输出最后结果
1.生成所有有序对
生成方法:对每个i小于等于n,枚举出所有的整数 j小于i ,并对每一对i和j生成序对 (i,j).
(define ( accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence) (accumulate op initial (cdr sequence)) )
)
)
(define (emuerate-interval low high)
(if (> low high)
'()
(cons low (emuerate-interval (+ low 1) high))
)
)
(define (unique-pairs n)
(accumulate append '()
(map (lambda (x)
(map (lambda (y) (list x y ))
(emuerate-interval 1 (- x 1) )
)
)
(emuerate-interval 1 n) )
)
)
2.过滤序列
过滤模板程序
(define (filter predicate sequence)
(cond ((null? sequence) '())
((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence))))
(else (filter predicate (cdr sequence)))
)
)
(define (prime-sum? pair)
(prime? (+ (car pair) (cadr pair)))
)
3.组合结果
(define (make-pair-sum l)
(map (lambda (pair) (list (car pair) (cadr pair) (+ (car pair) (cadr pair)))) l )
)
最终程序
(define (prime-sum-pairs n)
(make-pair-sum
(filter prime-sum?
(unique-pairs n))
)
)
《sicp》模块化程序设计 笔记的更多相关文章
- js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定
js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...
- 2017.11.13 在C语言中是否能用函数实现模块化程序设计
第七章 用函数实现模块化程序设计 (1)为什么要用函数? @function既是函数也是功能.函数就是用来完成一定功能的的(函数就是功能),函数名就是给这个功能起一个名字,一个C程序可由一个主函数和若 ...
- Java Web程序设计笔记 • 【目录】
章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...
- Java高级程序设计笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java高级程序设计作业目录(作业笔记) 第1章 Java高级程序设计笔记 • [第1章 IO流] 第2章 Java高级程序设 ...
- Javascript模块化编程笔记
最近在读阮一峰的博客http://www.ruanyifeng.com/blog/2012/10/javascript_module.html,随手记录一些重要笔记. Javascript模块的雏形 ...
- windows程序设计笔记
2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...
- win32多线程程序设计笔记(第四章下)
上一笔记讲了同步机制中的临界区域(Critical Sections).互斥器(Mutexes),下面介绍同步机制中的另外两种. 信号量(Semaphores) 举个例子: 现在有人要租车,接待他的代 ...
- JAVA高并发程序设计笔记
第二章 Java并行程序基础 1.join()的本质是让调用线程wait()在当前线程的对象上 2.Thread.yiedl()会使当前线程让出CPU 3.volatile保证可见性,无法保证原子性( ...
- Windows 程序设计 笔记
知识点 双字节字符集和Unicode字符集有何区别?采用双字节字符集有何问题 双字节字符集(DBCS)编码是0-255,DBCS含有1字节代码与2字节代码,而Unicode是统一的16位系统,这样就允 ...
随机推荐
- 笔谈FFmpeg(一)
现在的工作是播放器库的开发,可不是调用iOS系统自带的播放器框架进行一些简单的功能和界面定制,这些没什么含量.涉及iOS开发有3个年头了,现在的工作算是有点含金量了.涉及播放器的开发,FFmpeg的架 ...
- python图片二值化提高识别率
import cv2from PIL import Imagefrom pytesseract import pytesseractfrom PIL import ImageEnhanceimport ...
- 二十三、mysql索引管理详解
一.索引分类 分为聚集索引和非聚集索引. 聚集索引 每个表有且一定会有一个聚集索引,整个表的数据存储在聚集索引中,mysql索引是采用B+树结构保存在文件中,叶子节点存储主键的值以及对应记录的数据,非 ...
- 爬虫之cookie与代理
一, 基于requests模块的cookie操作 引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达 ...
- 2013.6.22 - OpenNE第二天
果然看中文材料就比较顺利,才半个小时就看完了一篇非常简单的综述<命名实体识别研究进展综述>(孙镇.王惠临).这个是2010年的文章,其实就是一个 科普文章,简述了国内外NER这块的历史如何 ...
- React系列,jsx
<script type="text/babel"> var name = "kimoo"; var fn = ()=> "kimo ...
- Immediate Decodability UVA-644(qsort排序 + 模拟)
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- 使用Restful风格中的post使用过遇到前端数据传送不到后端
问题描述:使用postman进行请求时候,前端的数据,一直在后端接收不到,找了好多资料,竟然是因为一个注解的原因. 后端接收设置:@RequestParam@ReqeustBody设置的原因 因为sp ...
- vue input只允许输入数字
template: <input type="text" v-model="pageIndex" @keyup="inputChange&quo ...
- 结构型模式(五) 外观模式(Facade)
一.动机(Motivate) 在软件系统开发的过程中,当组件的客户(即外部接口,或客户程序)和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战. ...