10.4 第十章小结

在这一章,我们探讨了与函数程序效率有关的问题,讨论了用函数方式处理大量数据。因为大多数函数程序使用递归实现,这一章的很大一部分就是围绕这个主题。

可以看到,使用递归的代码,一定要仔细,避免由于递归太深,引起堆栈溢出的错误。在本章开头,我们讨论了一种称为尾递归的技术,它可用来重写我们熟悉的列表处理函数(如map and filter),能避免堆栈溢出。单靠尾递归,不能解决所有问题,所以,我们还讨论了连续,并用来写了一个简单的树处理函数的健壮版本。

我们还探讨了优化处理函数性能的技术。特别是,我们看到了记忆化,能够缓存没有副作用的函数结果。有效的优化依赖复杂性分析,所以,我们讨论了函数式数据结构和性能特点。在选择算法和操作时要小心,因为,一些细微的差别,比如,是在函数式列表的头,还是在列表尾添加元素,可能显著影响性能。我们还讨论了数组, 它不是主要的函数式数据结构,但如果我们使用得当,也可以用于函数方式。

在下一章,我们将继续探讨在函数语言中,实现算法的常见技巧。下一章的许多主题都涉及到使用不可变数据类型,以及函数编程的数学的清晰度。

时间: 2024-08-06 18:36:46

10.4 第十章小结的相关文章

T-SQL开发 - 10.IDENTITY属性使用小结

从SQL Server 2012开始有了Sequence,简单用列如下: CREATE SEQUENCE TestSeq START WITH 1 INCREMENT BY 1; SELECT NEXT VALUE FOR TestSeq AS NextValue; 在这之前,表中生成序列号大多都是借助IDENTITY列属性,当然也有一些时候,是在自定义表中,自己维护序列号. 一. 创建IDENTITY列 if OBJECT_ID('test','U') is not null     drop

10. IDENTITY属性使用小结

从SQL Server 2012开始有了Sequence,简单用列如下: CREATE SEQUENCE TestSeq START WITH 1 INCREMENT BY 1 ; SELECT NEXT VALUE FOR TestSeq AS NextValue; 在这之前,表中生成序列号大多都是借助IDENTITY列属性,当然也有一些时候,是在自定义表中,自己维护序列号. 一. 创建IDENTITY列 if OBJECT_ID('test','U') is not null drop ta

10.1 第十章 视图

说明:偷懒了...... MySQL 从5.0.1 版本开始提供视图功能,本章将对MySQL 中的视图进行介绍. 11.1 什么是视图 视图(View)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的.视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的.视图相对于普通的表的优势主要包括以下几项.? 简单:使用视图的用户完全不需要关心后面对应的表的结构.关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集.? 安全:使用视图的用户只能访

2015年读的10本英文书小结

1.The Practice of Programming 透析法完成的第一本书,是计算机编程方面的经典书籍,书写于1999年,很多内容有点过时了.既想提高英语,又想提高计算机专业水平,两者很难兼得. 所以透析法的第一本还是从非常感兴趣的.蓝思值低的.情节比较吸引人的小说类书籍开始,不建议选专业书籍.如果生词太多,读起来非常吃力:如果内容不吸引人,读起来则非常枯燥,很可能坚持不下去. 2.Daughter of Deceit 其它网站上说该书的蓝思值为570,算相对较低的,但我读起来还是比较吃力

软件工程读书笔记(10)——第十章 软件测试

第十章 软件测试 一.验证与确认 1.软件的错误 有错是软件的属性,而且是无法改变的,因为软件是由人来完成的,所以由人做的工作都不会是完美无缺的. 2.验证与确认 为把握软件开发各个环节的正确性,需要进行各种确认和验证工作.验证和确认是贯穿软件生命周期的规范化评估方法. 二.软件测试基础 1.什么是软件测试 广义上讲,测试是指软件产品生存周期内所有的检查.评审和确认活动,如设计评审.系统测试. 狭义上讲,测试是对软件产品质量的检验和评价,它一方面检查软件产品质量中存在的质量问题,同时对产品进行客

10.1 第十章 索引的设计和使用

索引用于快速找出在某个列中有一特定值的行.如果不使用索引,MySQL 必须从第1条记录开始然后读完整个表直到找出相关的行.表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL 能快速到达一个位置去搜寻数据文件的中间,没有必要看所有数据.如果一个表有1000 行,这比顺序读取至少快100 倍.注意如果需要访问大部分行,顺序读取要快得多,因为此时应避免磁盘搜索. 大多数MySQL 索引(如PRIMARY KEY.UNIQUE.INDEX 和FULLTEXT 等)在BTREE 中存储.只是空

2019/10/2 图论测试小结

T1: 题意:求一棵树上两条点不交路径,使它们的点权之和最大: 思考过程:联想到了一个相似的问题——树上求k条边不交路径的最大边权和,想到了拆点为边,很快发现不对.考虑到仅有两条边于是先求出一条直径,再分类讨论看第二条路是否经过第一条直径,不经过则bfs求最大值,经过则对直径上每一个点求一个最长的.以它为端点的.不经过直径上点的链,然后贪心求最大值. 题解:同思路: T2: 题意:一个完全图,一课树,完全图上两点之间的距离等于树上两点之间的距离,在完全图上求最长哈密顿路径: 思考过程:没想拿满分

有用函数编程

<序> 感谢 关于本书 关于封面 第一部分 学习函数式思维 第一章 不同的思维 1.1 什么是函数式编程? 1.2 通往有用函数编程之路 1.3 用函数式编程提高生产力 1.3.1 函数范式 1.3.2 声明式编程风格 1.3.3 了解程序的执行 1.3.4 设计并发友好的应用程序 1.3.5 函数风格怎样形成代码 1.4 函数式编程演示样例 1.4.1 用声明式风格表达意图 1.4.1.1 用 LINQ 处理数据 1.4.1.2 用 XAML 描写叙述用户界面 1.4.1.3 声明式函数动画

Cocos2d-x游戏开发技术精解读书摘要(2016-5-27 10:52)

 Cocos2d-x游戏开发技术精解 刘剑卓 著 2013年6月第1版 chap2 Cocos2d-x引擎的开发环境 2.1跨平台的开发 2.2建立开发环境 2.2.1 PC开发环境 2.2.2 Android开发环境 2.2.3 iOS开发环境 2.3引擎中的混合编译 2.3.1 Java与C++的混合编译 2.3.2 Objective-C与C++的混合编译 2.4引擎的起点 2.4.1应用程序入口 2.4.2引擎应用入口 2.5丰富的示例程序 2.5.1 TestCpp示例项目 2.5