【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-09-24 19:10:10

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

彩电企业亏本中标42英寸液晶电视

梁振鹏 全国家电下乡产品(彩电)项目招标结果公布 当彩电产品终端零售最高限价由之前的2000元被大幅度提升至3500元之后,家电下乡市场格局顿时发生重大变化:多款37英寸.42英寸液晶电视纷纷中标,LG.夏普等外资品牌也首次入围. 昨日,"全国家电下乡产品(彩电)项目招标结果"正式公布,彩电中标企业暴增至26家,比上一轮的15家中标企业多了将近一倍.康佳.长虹.TCL.创佳.乐华.海信.海尔等七大国产品牌彩电企业均为"大满贯"--30款型号的投标产品全部中标. 康佳

上海百润市场份额仅0.3%最大客户甘肃烟草占42%

上海百润找了远在甘肃.名不见经传的华龙证券保荐,其实际控制人刘晓东正是起家于兰州卷烟厂 理财周报IPO实验室研究员 谭婷 张欣然/文 香精香料行业探路者上海百润即将登陆中小板,打响香精行业A股第一炮. 1亿的销售额,1000吨的产能,0.3%的市场份额,很袖珍的公司.上海百润目前有两类产品,一类是食用香精,一类是烟用香精. 这还是一个纯自然人的游戏.上海百润的发展史很平淡,6次股权转让自始至终没有VC/PE的参与,实际控制人刘晓东持有51.74%股权. 耐人寻味的是,这家在上海的公司找了远在甘肃

JAVA程序员必读:基础篇(3)语言基础

程序|程序员 我们先看看一个具体例子,给你们有个先入为主的感觉.以下是一个BasicsDemo程序,它的作用是从1加到10,并显示结果: public class BasicsDemo { public static void main(String[] args) { int sum = 0; for (int current = 1; current <= 10; current++) { sum += current; } System.out.println("Sum = &quo

用Java编写扫雷游戏--算法思考

算法 ?? 作者:Aaron2004 ??? 扫雷是一款相当经典的小游戏.他提供了非常友好的界面. ???下面就来讲解我的扫雷程序思想.首先我们在雷区上随机地放上雷,这可以用random类来实现.当没有雷的地方被点击后就会显示一个数字表示它周围有几个雷,这是怎么实现的呢?我们可以把整个雷区看成一个二维数组a[?i ][ j ],如雷区: ????????????? 11 ?12 ?13 ?14 ?15 ?16 ?17 ?18???????????? ?21 ?22 ?23 ?24 ?25 ?26

在Flash中实现Winamp均衡器频谱效果

首先看这个,音乐随便找了一个,不是很好听的 [全屏欣赏] 这个的制作需要获取音频的波谱,把音频的波谱转化为数据,这个东东需要一个软件叫FLASHAMP这个软件很小,而且不需要安装,直接使用,等会儿把这个软件放在下面,送给爱好者(它的使用非常简单,顺便也说说它的使用方法) 得到音乐的数据后,把这些数据作为数组中的元素,然后通过创建函数来调用,同时把这些值赋给MC的y坐标的缩放. 具体地说: 一.用FlashAmp获取音频数据 二.打开flash,开始制作 1.做作4个mc元件,上面的4个图形,注意

疯掉了,尽然有js写的操作系统_javascript技巧

http://www.masswerk.at/jsuix/ // JS/UIX v0.44 // (c) mass:werk (N.Landsteiner) 2003 // all rights reserved // term gui var conf_term_x=102; var conf_term_y=34; var conf_kbd_offset=34; var termImgPath='jsuix_support/'; var termDiv='termDiv'; var termB

文件句柄(file handles) &amp;amp; 文件描述符(file descriptors)

1.概述 在实际工作中会经常遇到一些bug,有些就需要用到文件句柄,文件描述符等概念,比如报错: too many open files, 如果你对相关知识一无所知,那么debug起来将会异常痛苦.在linux操作系统中,文件句柄(包括Socket句柄).打开文件.文件指针.文件描述符的概念比较绕,而且windows的文件句柄又与此有何关联和区别?这一系列的问题是我们不得不面对的. 博主通过翻阅相关资料,并采用了一些demo来验证相关观点.如果文中有理解偏差,欢迎指正,对linux内核不是很熟,

javaMail发邮件

使用javaMail发送电子邮件需要两个jar包:activation.jar和mail.jar.具体代码如下: index.jsp: 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

在linux下实现用ffmpeg把YUV420帧保存成图片

在网上搜了很久相关的问题,但是好像没有一个在linux下跑得比较完整的例子,不过经过自己一番搜索和总结,终于做出来了,哈哈,看下面的代码吧. 这个例子可以保存成bmp或者jpeg格式的图片. 下面的结构是保存bmp图片是用到的结构: [cpp] view plaincopy //把内存对齐定义为2个字节,   //这个可以避免BITMAPFILEHEADER   //出现4字节的对齐而使bmp位图的头出错   #pragma pack(2)      //下面两个结构是位图的结构   typed