【SICP练习】37 练习1.42



练习1.42

这道题让我彻底爱上了lambda。

复合这一概念早在数学中便已经学过了,我们先来根据题目的意思写出能够平方和能够加一这两个过程。可能是因为我看书不认真吧,写了很多次才完成这两个过程。

一开始我都是以(define (inc f)......)来开始的,但是每次都没有返回结果。终于醒悟了,过程嘛,就是像前面第41最下面所讲的一种关联那样,我们是要将一个lambda表达式关联到一个名字上面,这个名字于是就变成了过程名。而且过程本身也根本不需要传入参数,这又不是函数。

(define inc

(lambda (x)

(+ x 1)))

(define square

(lambda (x)

(* x x)))

基于同样的思想,我们是要将这两个过程关联到compose上。并且compose本身也是作为一个过程而不是函数。于是我又做了种种尝试。

(define compose

(lambda (f1 f2)

(f1 (f2))))

这里体现了复合的意思,但却没有真正返回点什么。看着题目中的表达式,让我明白了compose是一个要传入2个过程,并且返回一个过程的过程。而这里的次序不能颠倒了,是要先传入而后返回。因此定义如下:

(define compose

(lambda (f1 f2)

(lambda (x)

(f1 (f2 x)))))

在第一个lambda之后的就是返回的过程了。下面再来测试一下。

((compose square inc) 9)

;Value: 100

时间: 2024-10-14 00:58:30

【SICP练习】37 练习1.42的相关文章

SICP:1.37 递归/迭代求无穷连分式

#lang racket (define (cont-frac N D k) (define (cf t) (if (= t 1) (/ (N t) (D t)) (/ (N t) (+ (D t) (cf (- t 1)))) );if );cf (cf k) );cont-frac (define (cont-frac-iteration N D k) (define (cf result t) (if (= t k) result (cf (/ (N t) (+ (D t) result)

阅读总结

tpo31 Savanna Formation 8 题做错了,A , though B = A, but B(也有可能是对的)? TPO31 Reading1 speciation in geographically isolated populations 词汇: reproductively speciation species mate interbreed perceptible perceptibly imperceptibly colossal: enomous 不好理解的句子: S

http://mirror.centos.org/centos/7.2.1511/os/x86_64/Packages/, 开源软件清单list

http://mirror.centos.org/centos/7.2.1511/os/x86_64/Packages/ http://vault.centos.org/7.2.1511/os/Source/SPackages/ Name Last modified Size Description Parent Directory   -   389-ds-base-1.3.4.0-19.el7.x86_64.rpm 2015-11-25 14:10 1.7M   389-ds-base-de

HDU1067 Gap( BFS+ HASH 剪枝,矩阵用一个数表示)

题意:在4*8 的图中,给你4种类型的牌,每种牌序号1-7,比如42表示第4种牌的第二张,现在给你4*7一共28张,同时最左边的一列开始空的,第一步你要做的是把每种类型的1号牌从上到下放在这列空的位置上,然后在新出现的空位置,你要挑选空位子左边的那张牌的后继,如果没有的话,就不能操作. 解法:题目的状态很多,还有要怎么表示一个状态已经搜索过了呢.那就把矩阵做一下转化,把当前矩阵按行展开,以2为基数化为十进制的数(最大2^32,所以用Long Long),接下来存储这些整数,用map,set应该也

使用BeautifulSoup抓取

年前有个坑爹的需求来了,要把某点评网商户数据都给获取下来存储于数据库,好啦其实这个东西是蛮简单的: 首先到点评网把城市数据给拷贝下来,当然你也可以写个脚本把数据抓取下来,不够我没这么干:好了下面是用于抓取数据的脚本,下面我分享下给大家: 城市列表: alashan|57|阿拉善 anshan|58|鞍山 anqing|117|安庆 anhuisuzhou|121|宿州 anyang|164|安阳 aba|255|阿坝 anshun|261|安顺 ali|288|阿里 ankang|297|安康

IOCP扩展方法AcceptEx, DisconnectEx, GetAcceptExSockaddr用法示例

这篇文章记录了我刚接触IOCP模型时的理解,对于初学者,应该算不错的调试程序,仅有一个400多行代码的dpr文件,可以直接用WriteLn输出信息,前提是会用delphi建立Console Application,当然你也可以很容易的就改成了C控制台程序或是其它语言.附加代码中有详细的注释,如果你已有IOCP经验,那么请不用在此浪费时间,这个示例不适合你.示例仅展示了IOCP中AcceptEx, DisconnectEx, GetAcceptExSockaddr等的用法.在文章最后有推荐的两个连

C语言可变参数函数实现原理

一.可变参数函数实现原理 C函数调用的栈结构: 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈. 本文地址:http://www.cnblogs.com/archimedes/p/variable-parameter.html,转载请注明源地址. 例如,对于函数: void fun(int a, int b, int c) { int d; ... } 其栈结构为 0x1ffc-->d 0x200

分布式服务器监控工具NebulaSolarDash

详细介绍:https://www.oschina.net/p/nebula-solar-dash github:   https://github.com/toddlerya/NebulaSolarDash#readme 工具分为客户端和服务端两部分: 服务端使用了 bottle 来作为 Web 框架,Echarts 来渲染生成图表:客户端使用 Python 原生类库采集服务器资源. * 以客户端采集数据间隔时间120s为例,单节点24小时会向数据库写入大约4MB数据. * 单个客户端每次采集发

必胜技巧7

┏┯┓┏┯┓┏┯┓┏┯┓ ┠技┨┠巧┨┠大┨┠全┨ ┗┷┛┗┷┛┗┷┛┗┷┛ [1]准确率 90%以上后一公式 后一开出的相对应号,如上期开581.取个位数 1=579 下期开 185中5  代验证 0 4067 1 579 2 168 3 279 4 138 5 0249 6 135 7 2468 8 357 9 468 [2]两个胆码算法已验证过正确率 92% 1.用开奖号后三位数*后三位数/25 比如:今天46期开了69970 就用970*970/25 37636 取前两位,下期双胆为37