文档章节

SICP 1.45 1.46

 代码强国
发布于 2014/08/31 00:39
字数 232
阅读 93
收藏 0

解:1.45

试验的结果是两次平均阻尼可出结果,但结果会随着平均阻尼次数的增加而震荡,结果不精确。使用了1.46定义的过程

(define (compose f g)
  (lambda (x) (f (g x))))

(define (repeated f n)
  (if (= n 1)
      f
      (compose f (repeated f (- n 1)))))

(define (average-damp f)
  (lambda (x) (/ (+ x (f x)) 2.0)))

(define (sqrt-n x n r)
  (fixed-point (repeated (average-damp (lambda (y) (/ x (expt y (- n 1))))) 
                         r)
               1.0))
更正:
(define (sqrt-n x n r)
  (fixed-point ((repeated average-damp r) (lambda (y) (/ x (expt y (- n 1)))))
               1.0))


1.46

(define (iterative-improve good-enough? improve)
  (define (try x)
    (let ((next (improve x)))
      (if (good-enough? x next)
          next
          (try next))))
  try)

(define tolerance 0.00001)

(define (close-enough? v1 v2)
  (< (abs (- v1 v2)) tolerance))

(define (fixed-point f first-guess)
  ((iterative-improve close-enough? f) first-guess))

(define (sqrt x)
  (define (good-enough? dummy guess)
    (< (abs (- (* guess guess) x)) tolerance))
  (define (improve guess)
    (/ (+ ( / x guess) guess) 2.0))
  ((iterative-improve good-enough? improve) 1.0))


总结下:lisp不愧是用来做高阶函数演算的,这些功能用C来实现的话还真不知道该怎么写,写出来估计也会很丑。

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 55
码字总数 13525
作品 0
深圳
私信 提问
加载中

评论(2)

代码强国

引用来自“lsff01”的评论

楼主,45题(repeated (average-damp (lambda (y) (/ x (expt y (- n 1))))) r) 这部分错了
应该是((repeated average-damp r) (lambda (y) (/ x (expt y (- n 1))))), 你弄个高阶验证下就知道了。
, 多谢指出
lsff01
lsff01
楼主,45题(repeated (average-damp (lambda (y) (/ x (expt y (- n 1))))) r) 这部分错了
应该是((repeated average-damp r) (lambda (y) (/ x (expt y (- n 1))))), 你弄个高阶验证下就知道了。
Beaglebone Black教程Beaglebone Black中的Cloud9 IDE基本使用

Beaglebone Black教程Beaglebone Black中的Cloud9 IDE基本使用 Beaglebone Black中的Cloud9 IDE基本使用 Cloud9是集成在Beaglebone Black系统的中IDE。它类似于OS X中的Xcode、Linux中的Ecl...

大学霸
2016/03/29
201
0
iOS Simulator功能介绍关于Xamarin IOS开发

iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator。在没有iPhone或iPad设备时,可以使用iOS Simulat...

大学霸
2015/04/17
0
0
在VMware Workstation上安装Kali Linux

在VMware Workstation上安装Kali Linux VMware Workstation是一款功能强大的桌面虚拟计算机软件。该软件允许用户在单一的桌面上同时运行不同的操作系统,并且可以进行开发、测试、部署新的应...

大学霸
2015/03/24
0
4
iOS Sprite Kit教程之编写程序以及Xcode的介绍

iOS Sprite Kit教程之编写程序以及Xcode的介绍 Xcode界面介绍 一个Xcode项目由很多的文件组成,例如代码文件、资源文件等。Xcode会帮助开发者对这些文件进行管理。所以,Xcode的界面也比较复...

大学霸
2015/07/23
0
0
Xamarin.Forms教程下载安装JDK配置环境变量

Xamarin.Forms教程下载安装JDK配置环境变量 Xamarin.Form环境配置下载安装JDK JDK是编程Java程序必须的软件。也许有人会问我们用的C#为什么还有Java呢?这是因为我们的Android平台支持Java的...

大学霸
2016/03/04
81
0

没有更多内容

加载失败,请刷新页面

加载更多

新项目技术栈落地(二)——SpringMVC+Spring和SpringBoot的选择

使用SpringBoot进行项目开发已经是大势所趋,但在这里还是要说明为什么选择SpringBoot,选择SpringBoot带来的好处和SpringBoot注意的一些问题。 首先SpringBoot并不是一门新技术而是spring开...

Skqing
18分钟前
1
0
如何使用apache的ab压力测试小工具传参数

前言: windows下安装的phpstudy软件里集成的apache带了ab工具,所以可以不用单独下载。其他的操作系统下的安装或部署这里就不介绍了! 一、 使用windows的cmd进入apache的根目录,输入ab查看...

小谜弟
19分钟前
0
0
angular6.1.0 运行时报错ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected.

angular6.1.0 运行时报错ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected. node_modules/rxjs/internal/types.d.ts(81,74): error TS1005: ';' expect......

Jack088
22分钟前
0
0
阿里面试题剖析,如何保证消息不被重复消费?

面试题 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 面试官心理分析 其实这是很常见的一个问题,这俩问题基本可以连起来问。既然是消费消息,那肯定要考虑会不会重复消费...

李红欧巴
23分钟前
0
0
基于 DataLakeAnalytics 的数据湖实践

随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析...

zhaowei121
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部