《The Little Schemer》 FP编程、lisp入门必备

  1. 这书貌似没中文版;
  2. 有英文pdf版;完整版下载链接
  3. 英文不好的,被前几页噎住的,可以先到这里看翻译好的前言部分
  4. 看完人家翻译好的前言,那还等什么,下面的部分连英语三级都不需要!

该书大部分内容,会在左边给你一段“代码”,右边给你详细的解释,然后从上到下,就是解释“代码”的运行过程。就跟单步调试一样的流程。过程有点像思维训练,刚开始觉得有趣,看到后来觉得枯燥,但是事实上最好多看几遍。

摘记一下五法十诫

Five Laws

The Law of Car:

The primitive car is defined only for non-empty lists

The Law of Cdr:

The primitive cdr is defined only for non-empty lists. The cdr of any non-empty list is always another list.

The Law of Cons:

The primitive cons takes two arguments. The second argument to cons must be a list. The result is a list.

The Law of Null?:

The primitive null? is defined only for lists.

The Law of Eq?:

The primitive eq? takes two arguments. Each must be a non-numeric atom.

Ten Commandments

The First Commandment

When recurring on a list of atoms, lat, ask two questions about it : (null? lat) and else.

When recurring on a number, n, ask two questions about it : (zero? n) and else.

When recurring on a list of S-exp, l, ask three question about it: (null? l), (atom? (car l)), and else.

The Second  Commandment

Use cons to build lists.

The Third  Commandment

When building a list, describe the first typical element, and then cons it onto the natural recursion.

The Fourth  Commandment

Always change at least one argument while recurring. 

When recurring on a list of atoms, lat, use (cdr lat).

When recurring on a number, n, use (sub1 n). And when recurring on a list of S-exp, l, use (car l) and (cdr l) if neither (null? l) noe (atom? (car l)) are true.

It must be changed to be closer to termination. 
The changing argument must be tested in the termination condition: when using cdr, test termination with null? and when using sub1, test termination with zero?

The Fifth  Commandment

When building a value with o+, always use 0 for the value of the terminating line, for adding 0 does not change the value of an addition.

When building a value with *, always use 1 for the value of the terminating line, for multiplying by 1 does not change the value of a multiplication.

When building a value with cons, always consider () for the value of the terminating line.

The Sixth  Commandment

Simplify only after the function is correct.

The Seventh  Commandment

Recur on the subparts that are of the same nature:
* On the sublists of a list.
* On the subexpressions of an arithmetic expression.

The Eighth  Commandment

Use help function to abstract from representations.

The Ninth Commandment

Abstract common patterns with a new function

[2013-01-15]The Little Schemer 学习笔记的更多相关文章

  1. 《C++ Primer Plus》15.5 类型转换运算符 学习笔记

    C++相对C更严格地限制允许的类型转换,并添加4个类型转换运算符,是转换过程更规范:* dynamic_cast:* const_cast:* static_cast:* reinterpret_ca ...

  2. 01.第一章_C++ Primer学习笔记_开始

    1.2 初始输入输出 iostream库里面包含两个基础类型istream和ostream,分别表示输入流和输出流,一个流就是一个字符序列,从IO设备读出或者写入IO设备. 标准的输入输出对象 标准库 ...

  3. 2018/2/15 ES Beats的学习笔记

    Beats其实是几种服务的统称(你也可以把收集到的数据存储到别的数据源,不一定非要ES),这几种服务分别是: 1.PacketBeat 通过抓包的方式来监控一些服务.如:HTTP,DNS,Redis, ...

  4. 2015.05.15,外语,学习笔记-《Word Power Made Easy》 01 “如何讨论人格特点”

    2015.03.17,外语,读书笔记-<Word Power Made Easy> 01 “如何讨论人格特点”学习笔记 SESSIONS 1 本来这些章节都是在一两年前学习的,现在趁给友人 ...

  5. 20145213《Java程序设计》第八周学习笔记

    20145213<Java程序设计>第八周学习笔记 教材学习内容总结 "桃花春欲尽,谷雨夜来收"谷雨节气的到来意味着寒潮天气的基本结束,气温回升加快.刚出冬的我对于这种 ...

  6. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  7. NuGet学习笔记(2) 使用图形化界面打包自己的类库[转]

    http://www.cnblogs.com/lzrabbit/archive/2012/05/01/2477607.html 上文NuGet学习笔记(1) 初识NuGet及快速安装使用说到NuGet ...

  8. 【Cocos2d-x】学习笔记目录

    从2019年7月开始学习游戏引擎Cocos2dx,版本3.17. 学习笔记尽量以白话的形式表达自己对源码的理解,而不是大篇幅复制粘贴源码. 本人水平有限,欢迎批评指正! Cocos2d-x 学习笔记 ...

  9. Puppet学习笔记(CentOS6.3+Puppet3.01)

    Puppet学习笔记(CentOS6.3+Puppet3.01)  技术 Add comments Oct262012 下了决心,好好学习puppet,周末专门去参加一个puppet的培训,难得朋友那 ...

随机推荐

  1. Centos7 安装keepalived实现高可用

    场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not ...

  2. (转)MyBatis在插入的数据有空值时,可能为空的字段都要设置jdbcType

    1 引言 前面的所有语句中你所见到的都是简单参数的例子,实际上参数是 MyBatis 非常强大的元素,对于简单的做法, 90% 的情况参数都很少,比如: <select id="sel ...

  3. TransactionTemplate编程式事务管理方式的进阶使用---自定义拓展模板类

    1, 前面一篇的文章介绍了TransactionTemplate的基本使用方法. 同事在其基础上又做了一层封装,这样更贴合本公司的业务与规范. 2, 首先定义了两个接口: ServiceTemplat ...

  4. 【原创】08. easyui form控件,回调参数存在后缀 audio controls="controls" style="display: none;"></audio>

    版本: jQuery EasyUI 1.4.3 springmvc 3.2.6 谷歌浏览器,内核版本 chrome 56.0.2924.87 360急速浏览器,内核版本 chrome 50.0.266 ...

  5. 【有意思的BUG】需要停止的进程

    用户操作的目的:将某网站的歌曲分享到朋友圈 用户遇到的问题:在朋友圈内,有2个入口可以播放该第三方的歌曲.但是这两个入口可以同时播放,音乐重叠了. 操作步骤: [1] 将歌曲分享到朋友圈 [2] 在朋 ...

  6. 设计模式(2)--Singleton--单例模式--创建型

    1.模式定义: 单例模式确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 2.模式特点: (1)单例类只能有一个实例. (2)单例类必须自己创建自己的唯一实例. (3)单例类必须给所有 ...

  7. HDU 5067 Harry And Dig Machine:TSP(旅行商)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 题意: 给你一个n*m的地图,地图上标着对应位置的石子数.你从左上角出发,每次可以向上下左右四个 ...

  8. layer弹出层详解

    前言:学习layer弹出框,之前项目是用bootstrap模态框,后来改用layer弹出框,在文章的后面,我会分享项目的一些代码(我自己写的). layer至今仍作为layui的代表作,她的受众广泛并 ...

  9. 立即表达式的多种写法与注意点以及in操作符的作用

    立即表达式,在javascript中非常常见, 采用立即表达式可以形成一个局部作用域, 常配合闭包实现模块化编程等其他用途,接下来我们看看,在大多数的框架中,立即表达式都有哪些写法,以及需要注意的点, ...

  10. 如何理解iOS的“对象等同性”

    在iOS开发过程中,我们经常需要用到等同性来判断两个对象是否相等,通常我们会使用==来判断,但是这样比较出来的结果可能不是我们期望的:所以,一般我们会使用NSObject协议声明的isEqual方法来 ...