文档章节

【SICP练习】27 练习1.33

NoMasp
 NoMasp
发布于 2015/09/08 21:46
字数 508
阅读 3
收藏 0


练习1.33

题目第二行描述,只组合起由给定范围得到的项里的那些满足特定条件的项,因此我们需要在这一版本的accumulate中添加一个need-filter?,这个新的谓词可以用来传递下面就要用到的prime?

(define (filtered-accumulateneed-filter? combiner null-value term a next b)

(if (> a b)

  null-value

  (let ((other-term (filtered-accumulateneed-filter?

                                      combiner

                                      null-value

                                       term

                                       (nexta)

                                       b)))

       (if (need-filter? a)

               other-term

          (combiner (term a) other-term)))))

因此我们就可以通过accumulate来构造一个求ab之间所有素数的和了。就像上一道题中将accumulate补充称product等一样,这里也是将抽象的filtered-accumulate添加一些固定的元素让它稍微具体点。a小题的函数也就出来了。

(define(accumulate-prime-sum a b)

   (filtered-accumulate prime? + 0 (lambda (x)x) a (lambda (x) (+ x 1)) b))

编译这段函数的前提是你已经将prime?加载上来了。

其实解答b小题就是要写出一个能够判断互素的谓词,这里定为a-prime-to-b?

(define (a-prime-to-b? a b)

   (and (< a b) (= 1 (gcd a b))))

同样的,在这里也应该要将gcd函数加载上来。

类似于前面将need-to-filter?替换成prime?的过程,这里是用的谓词a-prime-to-b?

(define (product-of –prime-accumulaten)

  (filtered-accumulate (lambda (x) (a-prime-to-b?x n))

                      *

                      1

                      (lambda (x) x)

                      1

                      (lambda (x) (+ x 1))

                      n))

作为初学者,还是多做点实践好了,再来写出迭代版本的filtered-accumulate

我就不再将我对比的过程写下来了,大家可以翻到前面看看。

(define (filtered-accumulateneed-to-filter? combiner null-value term a next b)

   (define (filtered-accumulate-iter a other)

        (cond ((> a b) other)

              ((need-to-filter? a)

               (filtered-accumulate-iter (nexta) (combiner (term a) other)))

              (else

               (filtered-accumulate-iter (nexta) other))))

  (filtered-accumulate a null-value))

这道题我们就这样写完了,接下来我们会开始着重学习lambda了。虽然前面用过不少,但要想灵活运用lambda则比较难了。个人理解,lambda就像是C语言中的指针,灵活运用则威力强大。

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

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

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
VMware-Powercli常用脚本

目 录 1.1 修改ESXI主机的root密码... 5 1.2 将本地文件传输到VM... 5 1.3 修改虚拟机硬件版本... 5 1.4 查看虚拟机快照... 6 1.5 更改虚拟机网卡... 6 1.6 批量开关虚拟机... 6 1.7 批量模板...

qq8658868
2017/09/20
0
0
Xamarin.Forms教程下载安装Visual Studio 2015

Xamarin.Forms教程下载安装Visual Studio 2015 下载安装Visual Studio 2015 Visual Studio 2015是微软提供的IDE,其中集成了Windows下开发的各种工具。在编写Windows程序时,Visual Studio系...

大学霸
2016/03/04
397
0
关东升的《从零开始学Swift》第2版已经出版

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

tony关东升
2016/02/24
0
0
SQLServer2012表表达式练习

表结构与数据:https://github.com/XuePeng87/TSQLV4 练习1-1 练习内容:返回每个雇员在orderdate列中的最大值 涉及的表:Sales.Orders 输出的列:empid, maxorderdate 正确结果:9行 练习1...

杰克鹏仔
2016/11/17
36
0
关东升的《从零开始学Swift》3月9日已经上架

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

智捷课堂
2016/03/11
43
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
265
6
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部