SICP 1.45 1.46

解:1.45

从理论上不好证,得做试验,初步的想法是通过做试验找出计算n次方根需要计算平均阻尼的次数,找出规律,暂时未写

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来实现的话还真不知道该怎么写,写出来估计也会很丑。

时间: 2025-02-01 16:01:46

SICP 1.45 1.46的相关文章

SICP 习题 (1.46)解题总结

SICP 习题 1.46 要求我们写一个过程iterative-improve,它以两个过程为参数,其中一个参数用来检测猜测是否足够好,另一个参数用来改进猜测.过程iterative-improve应该返回另一个过程,所返回的过程接收一个参数作为初始猜测,然后不断改进猜测直到结果足够好.题目还要求我们使用iterative-improve重写1.1.7的sqrt过程和1.3.3节的fixed-point过程. 因为涉及到高阶函数,所以整个题目理解起来有一点点费劲.不过这道题作为第一章的收官题确实

【SICP练习45】 练习2.4

 练习2.4 直接运用对比的技巧就可以猜测出相应的cdr表示如下: (define (cdr z) (z (lambda (p q) q))) 但我们还是要按照题中要求用代换模型来检验.先来检验car的. (car (cons 0 1)) (car (lambda (m) (0 1))) ((lambda (z) (z (lambda (p q) p))) (lambda (m) (0 1))) ((lambda (m) (0 1)) (lambda (p q) p)) ((lambda (

EC读书笔记系列之17:条款41、42、43、44、45、46

条款41 了解隐式接口与编译器多态 记住: ★classes和templates都支持接口和多态 ★对classes而言接口是显式的(explicit),以函数签名为中心.多态则是通过virtual函数发生于运行期 ★对templates而言,接口是隐式的(implicit),奠基于有效表达式.多态则是通过template具现化和函数重载解析发生于编译期 条款42 了解typename的双重意义 记住: ★声明template参数时,前缀关键字class和typename可互换(函数模板或类模板

SICP 锻炼 (1.45)解决摘要

SICP 1.45是对前面非常多关于不动点的习题的总结. 题目回想了我们之前在1.3.3节使用的不动点寻找方法.当寻找y -> x/y 的不动点的时候,这个变换本身不收敛.须要做一次平均阻尼才干够. 对于y -> x/(y^2)这个变换也能够通过一次平均阻尼使它变得收敛. 只是一次平均阻尼对于四次方程是不够的,就是说,对y -> x/(y^3)这种变换,一次平均阻尼不足以使它收敛,须要做两次平均阻尼才行. 题目遵从一直以来的抽象原则.要求我们去多做几次測试,找出 y -> x /

CH Round #45 能量释放

能量释放 CH Round #45 - alan有一些陷阱 III 题目描述 alan得到一块由个能量晶体构成的矿石,对于矿石中的每一个能量晶体,如果用化学物质刺激某一个能量晶体,就能使它释放能量. 它的能量释放强度与晶体本身的能量值以及能量晶体的位置有关. 为了方便研究,alan做了如下的定义. 能量集:一块矿石中的第个能量晶体到第个能量晶体(包含和,)构成的集合. 能量储存点:对于一块矿石中的能量晶体和,若有,则称是能量储存点. 能量释放点:在一个能量集中,若存在一个能量晶体,使得除它之外的

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...直到45结束

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...知道45结束 public class Exam3{ public static void main(String[]args){ MyThread t1=new MyThread("线程一"); MyThread t2=new MyThread("线程二"); MyThread t3=new MyThread("线程三"); t1.

SICP_2.48-2.49

1 #lang sicp 2 3 (#%require sicp-pict) 4 5 (define (make-vect a b) 6 (cons a b)) 7 8 (define (xcor-vect v) 9 (car v)) 10 11 (define (ycor-vect v) 12 (cdr v)) 13 14 (define (add-vect v1 v2) 15 (make-vect (+ (xcor-vect v1) 16 (xcor-vect v2)) 17 (+ (yco

wc.exe命令行程序——c语言实现

1 /* 2 * 没能实现的功能:wc.exe -s递归处理目录下符合条件的文件 3 * wc.exe -x 显示图形界面 4 * 5 * 6 * 实现的功能: wc.exe -c显示文件的字符数. 7 * wc.exe -l行数. 8 * wc.exe -w单词. 9 * wc.exe -a空行数.代码行数.注释行数的统计测试 10 *` 11 * 12 */ 13 14 #include"iostream" 15 using namespace std; 16 void CharC

Winfrom 简单的安卓手机屏幕获取和安卓简单操作

为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西, 实现了以下简单功能   1.屏幕获取(因为是截图方式获取的,所以有点卡顿) 2.实现点击功能,并在点击的时候出现一个手势图标,方便用户观看 3.实现简单的滑动功能 4.实现在界面上画图功能 5.实现拖拽安装apk功能 操作说明:鼠标左边 模拟手机点击,中键停止/开始刷新界面(画图的时候不能刷新),右键去掉画图内