zoukankan      html  css  js  c++  java
  • 【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

    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    7人脸识别
    1图片视频文件操作基础
    3直方图与二值化,图像梯度
    6模板匹配(人脸匹配案例)
    基础习题
    碎片知识点整理
    详解:MySQL数据表损坏的正确修复方案
    前端开发:模块化 — 高效重构
    分享几个基于jQuery不错的前端相册展示插件代码
    程序员编程10年的心得和体会
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786182.html
Copyright © 2011-2022 走看看