文档章节

【SICP练习】26 练习1.32

NoMasp
 NoMasp
发布于 2015/09/08 21:49
字数 415
阅读 1
收藏 0


练习1.32

因为递归比迭代要更容易实现,因此我先考虑的递归。先将sumproduct都列出来。

(define (sum term a next b)

       (if(> a b)

      0

      (+(term a)

        (sum term (next a) next b))))

(define (product term a next b)

    (if(> a b)

       1

      (* (term a)

        (product term (next a) next b))))

通过对比我们发现,仅仅是有2个地方的区别。按照题中的要去,我们将01的位置用null-value代替,将+*combiner代替。在函数的参数中添加这两个新的参数即可。通过对比,其实也不难嘛。

(define (accumulate combinernull-value term a next b)

    (if (> a b)

       null-value

       (combiner (term a) (accumulate combinernull-value term (next a) next b))))

题中还要求我们定义出sumproduct来,这里我就列出sum的递归accumulate版本。

(define (sum term a next b)

   (accumulate + 0 term a next b))

接下来我们再看看如何写出迭代版本的accumulate。还是一样,先列出迭代版本的sumproduct

(define (sum term a next b)

   (define (sum-iter a other)

       (if (> a b)

         other

          (sum-iter (next a)

(+(term a) other))))

   (sum-iter a 0))

(define (product term a next b)

   (define (product-iter a other)

       (if (> a b)

          other

          (product-iter (next a)

                        (* (term a) other))))

   (product-iter a 1))

同样是通过类比,我们又可以写出迭代版本的accumulate

(define (accumulate combinernull-value term a next b)

    (define (accumulate-iter a other)

       (if (> a b)

          other

          (accumulate-iter (next a)

                          (combiner (term a)other))))

   (accumulate-iter a null-value))

这次我们就来写迭代版本的product

(define (product term a nextb)

        (accumulate * 1 term a next b))

通过这些对比,感觉枯燥的递归和迭代还挺有意思的。

版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

本文转载自:http://blog.csdn.net/nomasp/article/details/43601463

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
加载中

评论(0)

troubleshooting: pgs inconsistent; 1 scrub errors

Problem My demo ceph cluster outputs the error message as below: ceph1:~ # ceph health detail HEALTH_ERR 1 pgs inconsistent; 1 scrub errorspg 1.32 is active+clean+inconsistent, ......

认真即可
2016/08/26
293
0
win10安装docker错误

$ docker version Client: Version: 17.09.0-ce API version: 1.32 Go version: go1.8.3 Git commit: afdb6d4 Built: Tue Sep 26 22:40:09 2017 OS/Arch: windows/amd64 error during connec......

DamienChen
2018/03/10
357
0
使用 docker 搭建lnmp网站平台安装博客

1.环境准备系统环境:root@ubuntu:~$ cat /etc/issueUbuntu 16.04.3 LTS n lroot@ubuntu:~$ sudo uname --mx86_64 docker 环境:root@ubuntu:~# docker versionClient:Version: 17.09.0-ceAP......

ahtornado
2017/12/30
0
0
关东升的《从零开始学Swift》第2版已经出版

关东升的《从零开始学Swift》第2版已经出版 大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》 《从零开始学Swift》将在《...

tony关东升
2016/02/24
0
0
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

智捷课堂
2016/03/11
46
0

没有更多内容

加载失败,请刷新页面

加载更多

Java BigDecimal 如何去掉末尾多余的 0

Java BigDecimal 如何去掉末尾多余的 0 呢? /** * To StripTrailingZeros */ @Test public void bigDecimalStripTrailingZerosTest() { BigDecimal bi......

honeymoose
今天
43
0
齐齐哈尔哪里可以开发票-中国新闻网

齐齐哈尔哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该...

8315581
今天
79
0
衡水哪里可以开发票-中国新闻网

衡水哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种连...

457192
今天
60
0
张家口哪里可以开发票-中国新闻网

张家口哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种...

253878
今天
66
0
黑龙江哪里可以开发票-中国新闻网

黑龙江哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种...

富大范
今天
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部