`
SavageGarden
  • 浏览: 222007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SICP学习笔记 1.3.1 过程作为参数

    博客分类:
  • SICP
 
阅读更多

    练习1.29

 

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a) (sum term (next a) next b))))
      
(define (integral f a b dx)
  (define (add-dx x) (+ x dx))
  (* (sum f (+ a (/ dx 2.0)) add-dx b) dx))
  
(define (simpson f a b n)
  (define (add-kh k) (* k (/ (- b a) n)))
  (define (inc n) (+ n 1))
  (define (term k)
    (cond ((= k 0) (f a))
          ((= k n) (f b))
          ((= (remainder k 2) 0) (* 2.0 (f (+ a (add-kh k)))))
          (else (* 4.0 (f (+ a (add-kh k))))))) 
  (* (/ (/ (- b a) n) 3)
     (sum term 0 inc n)))
     

   > (integral cube 0 1 0.01)
   0.24998750000000042
   > (integral cube 0 1 0.001)
   0.249999875000001
   > (simpson cube 0 1 100)
   0.24999999999999992
   > (simpson cube 0 1 1000)
   0.2500000000000002

   可见使用辛普森数值积分法确实能得到更为精确的结果

 

    练习1.30

 

;; sum过程的迭代实现 
(define (sum-iter term a next b)
  (define (iter a result)
     (if (> a b)
         result
         (iter (next a) (+ (term a) result))))
  (iter a 0))

 

    练习1.31

 

a.
;; product过程的迭代实现
(define (product term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (* (term a) result))))
  (iter a 1))

;; factorial过程的实现
(define (factorial n)
  (define (inc n) (+ n 1))
  (define (identity x) x)
  (product identity 1 inc n)) 
  
;; 基于product过程计算pi值
(define (pi-product n)
  (define (square x) (* x x))
  (define (term k)
    (/ (* 4.0 k (+ k 1)) (square (+ (* 2.0 k) 1))))
  (product-new term 1 inc n)) 
  
> (* 4 (pi-product 100))
3.1493784731686008
> (* 4 (pi-product 1000))
3.142377365093882
> (* 4 (pi-product 10000))
3.1416711865344946   

b.
;; product过程的递归实现
(define (product term a next b)
  (if (> a b)
      1
      (* (term a) (product term (next a) next b))))

 

    练习1.32

 

;; accumulate过程的递归实现
(define (accumulate combiner null-value term a next b)
  (if (> a b)
      null-value
      (combiner (term a)
                (accumulate combiner
                            null-value
                            term
                            (next a)
                            next
                            b))))

;; accumulate过程的迭代实现
(define (accumulate combiner null-value term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (combiner (term a) result))))
  (iter a null-value))
  
;; 定义sum和product, 则需要实现其对应的combiner过程
;; combiner过程需要两个参数:当前项和前面各项累计结果, 则对sum和product分别实现如下combiner过程
(define (add x y) (+ x y))
(define (pro x y) (* x y))

;; 对应的sum和product过程为
(accumulate add 0 term a next b)
(accumulate pro 1 term a next b)
 

    练习1.33

 

;; filtered-accumulate过程的迭代实现
(define (filtered-accumulate filtered combiner null-value term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (if (filtered a)
            (iter (next a) (combiner (term a) result))
            (iter (next a) result))))
  (iter a null-value))
  
a)
(define (sum-prime a b)
  (define (inc n) (+ n 1))
  (define (identity x) x)
  (filtered-accumulate prime? add 0 identity a inc b))
  
b)
(define (pro-gcd i n)
  (define (inc n) (+ n 1))
  (define (identity x) x)
  (filtered-accumulate gcd? pro 1 identity i inc n))
 
1
2
分享到:
评论

相关推荐

    SICP 习题答案

    - **高阶函数**:能够接受函数作为参数或返回函数的函数,例如map、filter和reduce等。 - **递归**:函数调用自身的技术,常用于解决可重叠子问题,如斐波那契数列的计算。 3. **数据结构**: - **列表**:SICP...

    SICP(计算机体系结构)

    - **1.3.1 作为参数的过程**: 如何将过程作为其他过程的参数。 - **1.3.2 使用lambda构造过程**: 学习lambda表达式的基础知识。 - **1.3.3 作为通用方法的过程**: 探讨过程如何作为问题解决的通用工具。 - **...

    sicp 2016 from

    - **作为参数的过程 (Procedures as Arguments)**:展示如何将过程作为参数传递给其他过程。 - **使用 lambda 构建过程 (Constructing Procedures Using lambda)**:介绍了 lambda 表达式的使用。 - **过程作为...

    SICP(python中文带书签)

    在Python中实现SICP的挑战在于,Python的语法和Lisp有很大区别,但这也为学习者提供了思考不同编程范式的机会。例如,Python的面向对象特性可以用来模拟SICP中的一些过程抽象,而Lisp中的动态作用域在Python中需要...

    a_book_sicp_py

    6. 高阶函数的应用:高阶函数是那些可以接受其他函数作为参数或者返回一个函数的函数。这种抽象是函数式编程的核心特征之一,它在Python中也被广泛支持,并可以用来编写更加灵活和可重用的代码。 7. 计算机程序的...

    sicp in python 中文 sicp 中文

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

    SICP中文第二版

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

    sicp 2.2.4节图形语言

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

    sicp-Structure and Interpretation of Computer Programs

    SICP不仅在MIT内部被广泛用作教学材料,而且在全球范围内也享有极高的声誉,被视为学习计算机科学理论基础的必读之作。 #### 二、书籍内容概览 SICP的内容涵盖了程序设计的基本概念、过程抽象、数据抽象、模块化...

    SICP LISP AI

    1. **过程和数据**:书中首先介绍了过程(函数)作为基本的抽象机制,以及如何将数据结构视为可组合的过程。这种观点改变了我们看待计算问题的方式,强调了将复杂问题分解为简单过程的重要性。 2. **环境模型**:...

    SICP 解题集

    通过学习SICP,读者可以掌握如何用基本的构建块来构造复杂的计算系统,并理解这些系统的行为。书中的习题设计巧妙,旨在引导读者深入思考编程语言的内部机制以及如何设计和实现自己的编程环境。 《SICP解题集》中...

    sicp_notes:SICP笔记和练习

    《SICP笔记和练习》是一份详尽的资源,主要涵盖了由MIT教授们编写的经典计算机科学教材《Structure and Interpretation of Computer Programs》(简称SICP)的学习笔记和练习解答。这份资料以HTML格式呈现,便于在线...

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

    它以Lisp语言作为教学工具,因为Lisp的简洁性和表达力强,非常适合用来展示程序的构造和解释过程。通过学习SICP,学生将能够理解如何设计、分析和实现复杂的程序系统,培养出强大的抽象思维能力。 课程内容涵盖了...

    sicp 2nd 英文chm

    5. **过程**:SICP讲解了过程作为“计算的封装”的概念,使得过程可以作为值传递,从而实现了高阶函数。 6. **元编程**:SICP还涉及元编程,即编写操作代码的代码。通过这种方式,读者可以理解编程语言是如何工作的...

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

    本资料集包含了对SICP第一章习题的解答,旨在帮助学习者巩固基础,深化对函数式编程的理解。 首先,让我们关注一下习题解答中的几个关键部分: 1. **1.6.ss**: 这部分可能涉及到函数定义、递归和过程抽象。SICP的...

    SICP-Python版本

    SICP-Python版本

    Python SICP epub版本

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

    SICP 使用的scheme解释器

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

    Learn_sicp:学习sicp的一些代码

    在学习SICP的过程中,你将接触到以下核心知识点: 1. **数据作为抽象**:SICP强调数据结构和操作数据的函数是分离的,这种思想被称为“数据抽象”。通过定义数据类型和操作这些数据的函数,可以隐藏实现细节,提高...

Global site tag (gtag.js) - Google Analytics