`
hotcharm
  • 浏览: 17109 次
  • 性别: Icon_minigender_1
  • 来自: 义乌
最近访客 更多访客>>
社区版块
存档分类
最新评论

sicp练习1.20 gcd过程 应用序 正则序 remainder次数

阅读更多

(define (gcd a b remainder-count)
  (if(= b 0)
     (begin (display "\nremainder count: ")
            (display remainder-count)
            (display "\n gcd result:")
            (display a)
            (display "\n")
            a)
     (gcd b (remainder a b) (+ remainder-count 1))))

(gcd 12 9 0)
;(gcd 12 28 0)

(define (new-if predicate then-clause else-clause)
  (cond (predicate then-clause)
        (else else-clause)))

(define (gcd-new-if a b remainder-count)
  (new-if (= b 0)
     (begin (display "\nremainder count: ")
            (display remainder-count)
            (display "\n gcd result:")
            (display a)
            (display "\n")
            a
            )
     (gcd-new-if b (remainder a b) (+ remainder-count 1))))

(gcd-new-if 12 9 0)
;(new-if (> 1 2) (begin (display "1") (display "1") )(display "2"))

  以上gcd函数自动记录remainder调用次数。(gcd 12 9 0)调用remainder次数为2次。

if的scheme运算是正则运算,不管怎么样子都是先对谓词求值,然后分支运算。

要使得scheme运算为应用序,则需要使用new-if,自己定义个函数来代替if,由于new-if是自定义的函数,则使用应用序先对其参数顺序求值。因此会导致gcd-new-if 循环调用而产生死循环,并且由于remainder的存在,在循环调用的过程中,remainder a b 的参数b为0时,则发生错误,即求余运算中的除数为0,导致错误。

 

 

分享到:
评论

相关推荐

    sicp第二章练习题的解答

    在SICP中,练习2.5通常涉及到了过程定义、抽象和组合,可能需要读者理解并实现一种计算机制,如迭代或递归。 2. **chapter2.ss**: 这可能是整个第二章所有练习题的集合或者部分题目的解答。通过这个文件,读者可以...

    sicp:我的 SICP 练习

    每个练习都是对SICP理论知识的实际应用,有助于提升编程思维和解决问题的能力。 1. **函数式编程基础**:Scheme强调使用函数作为基本的构造块。学习者会接触到如何定义函数、使用λ表达式创建匿名函数、利用递归...

    SICP 习题答案

    - **λ演算**:SICP引入了λ演算作为理解计算的基础,这是一种形式化的函数定义和应用方式,它是函数式编程语言的理论根基。 - **过程**:在SICP中,过程是λ演算中的核心概念,代表可执行的计算操作。 - **组合...

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

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

    sicp-solutions:SICP练习解决方案

    4. **递归**:递归是Scheme和Lisp编程中的核心概念,SICP的练习解决方案中充满了各种递归应用,如树的遍历、斐波那契数列等。 5. **元编程**:元编程在SICP中占有重要地位,通过元编程可以操作和修改程序本身。mit-...

    sicp-clojure:在 Clojure 中解决的 SICP 练习

    "sicp-clojure" 项目则是将 SICP 的练习用 Clojure 语言进行了实现,为学习者提供了从不同角度理解和应用 Lisp 风格编程的良好资源。 在这个项目中,你可以找到一系列 Clojure 代码,它们对应于 SICP 教程中的各个...

    sicp:我对SICP练习的回答

    《SICP:我对SICP练习的回答》 SICP,全称为《Structure and Interpretation of Computer Programs》,是一本由Harvard大学的Herman Tulleken和MIT的Gerald Jay Sussman、Guy L. Steele Jr.共同编著的经典计算机...

    SICP-Solutions:我对 SICP 练习的回答

    通过阅读这些解答,读者可以了解到如何应用SICP中的概念来解决实际问题,如递归、数据结构的构造与操作、过程抽象、组合器与解释器的构造等。 例如,SICP的第一章主要介绍了函数和过程的概念,以及如何使用它们来...

    sicp:SICP练习的解决方案

    文件"sicp-main"可能是包含了SICP书中各章节练习的解答或者是实现,这将有助于读者检验自己的理解或参考解题思路。在阅读和实践SICP的过程中,以下是一些关键知识点: 1. **函数式编程**:SICP的核心是函数式编程...

    SICP(python中文带书签)

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

    SICP:在 Scheme 中制定的 SICP 编程练习

    《SICP:在 Scheme 中制定的 SICP 编程练习》是针对计算机科学教育领域的一本经典教材——《结构与解释程序》(Structure and Interpretation of Computer Programs,简称 SICP) 的实践部分。SICP 由 Harold Abelson ...

    sicp in python 中文 sicp 中文

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

    sicp-Structure and Interpretation of Computer Programs

    - **1.1.5 过程应用的替换模型**(The Substitution Model for Procedure Application):提出一种直观的模型来理解过程的应用。 - **1.1.6 条件表达式和谓词**(Conditional Expressions and Predicates):讨论...

    sicp 2.2.4节图形语言

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

    sicp 2016 from

    - **扩展练习:区间算术 (Extended Exercise: Interval Arithmetic)**:提供了一个具体的应用场景来进一步巩固所学概念。 - **层次数据与闭包性质 (Hierarchical Data and the Closure Property)** - **序列表示 ...

    SICP 解题集

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

    SICP中文第二版

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

    a_book_sicp_py

    综上所述,本书《a_book_sicp_py》是一本适合初学者到中级程序员的参考书籍,旨在通过SICP的经典理念和Python的实践应用,帮助读者深入理解计算机科学的基本概念,并掌握Python编程的精髓。通过对函数、对象、程序...

Global site tag (gtag.js) - Google Analytics