zoukankan      html  css  js  c++  java
  • 【SICP练习】62 练习2.33

    

    练习2.33

    既然要用到accumulate,那么我们先来回顾一下这个函数好了。其有三个参数,一个操作符,一个用来作为初始化的值,一个是需要运算的序列。题目中的map已有的定义如下:

    (define (map p sequence)

       (accumulate (lambda (x y) <??>)

                    nil

                    sequence))

    这里的nil也是’(),其作为accumulate的参数initial。后面的sequence也就是accumulate的参数sequence。那么lambda表达式里要做的就是处理这些东西了。我们用map的参数来处理初始值,然后将其用cons组合。而很明显的,nil对应于xseguence对应于y。于是乎。

    (define (map p sequence)

       (accumulate (lambda (x y)

                                  (cons(p x) y))

                    nil

                    sequence))



    虽然不太规范,但意思就是这么个意思。

    下面的append就比较简单了,往前翻到第68页最下面有其的定义,但不看也知道,就是将两个表组合到一起嘛。而题中已经有了cons,那不就有了么。

    (define (append seq1 seq2)

       (accumulate cons <??> <??>))

    同样在第68页也有length的定义。其实这三个小题的难点以及出题的目的都是在于accumulate。通过不断的将sequence不断的car,并且累计计数加1就可以得出length了。

    (define (length sequence)

       (accumulate (lambda (x y) (+ 1 y))

                    0

                    sequence))

    如果有兴趣可以直接再写写appendlength的展开式之类的。

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

  • 相关阅读:
    JavaFx初探
    TraceView总结
    sprintf,你知道多少?
    C/C++:多个.cpp文件包括同一个.h头文件定义方法
    Android中Preference的使用以及监听事件分析
    Android系统默认Home应用程序(Launcher)的启动过程源码分析
    升级、备份红帽PaaS openshift 上的 wordpress
    几种开源分词工具的比較
    设计模式奠基石——UML关系转化为代码
    Windows 7系统安装MySQL5.5.21图解
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786157.html
Copyright © 2011-2022 走看看