`

SICP

 
阅读更多

racket(plt scheme升级版) 下载地址:http://racket-lang.org/download/

 

习题:1.3 定义一个过程,它以三个数作为参数,返回其中两个数之和

 

#lang racket
(define (min x y)
  (if (> x y)
      y
      x)
  )

(define (mul-min x y z)
  (if (> (min x y) z)
      z
      (min x y)))

(define (add-two-bigger x y z)
  (- (+ x y z)
     (mul-min x y z)))

(add-two-bigger -3 -6 3)
      

 

习题:1.5 正则序和应用序 解释情况

答:应用序 p一直递归,死循环。 正则序可以输出0

 

 

例子1:牛顿法求平方根

 

#lang racket  
 
(define (square x)
  (* x x))

(define (improve guess x)
 (/ (+ (/ x guess) guess) 2)
  )

(define (enough?  guess x)
  (> 0.0001
       (abs(- (square guess) x))))

(define (sqrt-iter guess x)
  (if (enough? guess x)
      guess
      (sqrt-iter (improve guess x) 
                 x))
       )
(define (sqrt x)
  (sqrt-iter 1.0 x))

(sqrt 4)
      
 

习题1.6 创造new-if来代替if方法。

 

#lang racket  
 
(define (square x)
  (* x x))

(define (improve guess x)
 (/ (+ (/ x guess) guess) 2)
  )

(define (enough?  guess x)
  (> 0.0001
       (abs(- (square guess) x))))
(define (new-if p then-clause else-clause)
  (cond (p then-clause)
        (else else-clause)))

(define (sqrt-iter guess x)
  (new-if (enough? guess x)
      guess
      (sqrt-iter (improve guess x) 
                 x))
       )
(define (sqrt x)
  (sqrt-iter 1.0 x))

(sqrt 4)
      

  答:出现死循环,原因是:解释器使用应用序进行解析代码,对于求值描述是首先对运算符和各个运算对象求值,而后将得到的过程应用于得到的实际参数。所以对于new-if中的方法,他会先去计算p then-clause else-clause全部计算好,然后再执行cond方法,这个导致了else-clause出现了递归,一直重复计算。

 

习题1.7 更改enough方法

 

#lang racket
(define (sqrt3 x)
  (sqrt3-iter 1.0 x 0.1))

(define (sqrt3-iter guess x last-guess)
  (if (enough? guess last-guess)
      guess
      (sqrt3-iter (improve guess x) x guess)))

(define (enough? guess last-guess)
  (> 0.00001 (/ (abs (- guess last-guess)) guess)))

(define (improve guess x)
  (/ (+ (/ x (* guess guess)) (* 2 guess)) 3))

(sqrt3 2000000000000000000000007)
 

把这个与1.8代码做对比,确实时间上差很多

 

习题1.8 求立方根

 

 

#lang racket
(define (sqrt3 x)
  (sqrt3-iter 1.0 x))

(define (sqrt3-iter guess x)
  (if (enough? guess x)
      guess
      (sqrt3-iter (improve guess x) x)))

(define (enough? guess x)
  (> 0.00001 (abs (- (* guess guess guess) x))))

(define (improve guess x)
  (/ (+ (/ x (* guess guess)) (* 2 guess)) 3))

(sqrt3 27)
分享到:
评论

相关推荐

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    《计算机程序构造和解释》(SICP,Structure and Interpretation of Computer Programs)是一本具有深远影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman编写,MIT Press出版。这门课程由北京大学数学...

    SICP(python中文带书签)

    《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...

    sicp 2.2.4节图形语言

    《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...

    SICP习题解答,主要第一章的内容习题答案

    《SICP习题解答,主要第一章的内容习题答案》 SICP,全称《Structure and Interpretation of Computer Programs》(计算机程序的构造和解释),是计算机科学领域的一本经典教材,由MIT(麻省理工学院)的 Harold ...

    sicp-Structure and Interpretation of Computer Programs

    ### SICP——《计算机程序的结构与解释》 #### 一、概述 《计算机程序的结构与解释》(Structure and Interpretation of Computer Programs, 简称SICP)是一本由MIT电气工程与计算机科学系教授Harold Abelson和...

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh

    a_book_sicp_py

    本书名为《a_book_sicp_py》,是一本以Python语言为基础介绍设计模式和计算机科学基础的书籍。根据描述和部分内容,可以提炼出以下知识点: 1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关...

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz

    标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...

    SICP 解题集

    《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...

    SICP 使用的scheme解释器

    SICP 使用的scheme解释器 以前叫DrScheme

    SICP 习题答案

    《计算机程序的构造和解释》(SICP)是一本极具影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,MIT出版社出版。这本书以其深入探讨编程概念、程序设计方法以及计算机系统的工作原理而闻名。1-3...

    sicp第二章练习题的解答

    《SICP(Structure and Interpretation of Computer Programs)》是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,它强调了程序设计的基础和原理,特别是函数式编程思想。第二章主要探讨了...

    SICP-Python版本

    SICP-Python版本

    SICP LISP AI

    《SICP》全称是《Structure and Interpretation of Computer Programs》,中文译为《计算机程序的构造和解释》。这是一本经典的计算机科学教材,由Harvard大学的 Harold Abelson 和 Gerald Jay Sussman 教授撰写,...

    Python SICP epub版本

    Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用

    sicp 2016 from

    ### 结构与解释计算机程序 (SICP) #### 标题和描述中的核心知识点解析 **《结构与解释计算机程序》(Structure and Interpretation of Computer Programs, SICP)** 是由哈佛大学的 Harold Abelson 和麻省理工学院...

    伯克利计算机思维训练课程SICP高清版

    《伯克利计算机思维训练课程SICP高清版》是一门深入浅出的计算机科学入门课程,旨在为初学者提供坚实的计算机思维基础和软件工程理念。该课程源于世界顶尖学府加州大学伯克利分校,以其高质量的教学内容和实用价值...

    sicp和操作系统:精髓与设计原理第七版

    资源名称:sicp 和 操作系统:精髓与设计原理第七版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

Global site tag (gtag.js) - Google Analytics