【SICP练习】37 练习1.42

本文通过具体的示例,展示了如何使用Scheme语言中的lambda表达式实现过程的复合,即一个过程作为另一个过程的输入,最终形成新的过程。作者详细记录了从理解题目要求到逐步实现的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



练习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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值