scheme语言控制抽象 全.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
scheme语言控制抽象 全

参考教材 计算机程序的构造和解释(原书第2版) Structure and Interpretation of Computer Programs,Second Edition Massachusetts Institute of Technology /sicp/full-text/book/book.html (美)Harold Abelson,Gerald Jay Sussman,Julie Sussman 引言 任何强有力的程序设计语言都必须能表述基本的数据和过程,还需要提供对数据和过程进行组合和抽象的方法。 ——摘自《计算机程序的构造和解释》 程序设计基本元素 1 表达式 ⑴ 元表达式 常量 数 486 字符串,例如: “hello” 布尔值,例如: #f, #t 名字 例如:+ //内部过程 例如:pi //由define或其他过程创建的变量 ⑵ 组合表达式(前缀表示法) 组合:(operator operand operand …) 2 命名 命名 (define pai 3.14159) (define radius 10) (* pai (* radius radius)) (define circumference (* 2 pai radius)) circumference 3 复合过程 过程定义的一般形式: 过程定义在环境中关联符号name 例如: 3 复合过程 定义过程x2 + y2 4 求值模型 ①应用序求值(代换模型) 先求值参数,后应用的求值模型(Scheme采用该模型) ②正则序求值 先完全展开,后归约的求值模型 5 条件表达式和谓词 条件表达式语法形式: 例如:求 5 条件表达式和谓词 其它复合谓词 (and e1 ... en) (or e1 ... en) (not e) 例如:检测某个数是否大于或等于另一个数 实例:采用牛顿法求平方根 平方根函数 ——牛顿逐步逼近法求 实例:采用牛顿法求平方根 实例:采用牛顿法求平方根 求解复杂问题的一种方法 归约原理:复杂问题分解为子问题 6 内部定义和块结构 块结构:允许嵌套定义 6 内部定义和块结构 块结构:词法作用域 素数检测 从2开始的连续整数去检查能否整除n 过程计算 1 线性的递归和迭代 线性的递归过程 例如: 考察6! 线性迭代过程 考察6! 线性的递归和迭代 两种计算过程的分析比较: ①线性的递归计算过程 代换模型揭示出一种先展开后收缩的形状。 解释器需要维护以后将要执行的操作的轨迹。 对应的计算称为递归计算过程。 ②线性迭代计算过程 状态可以用固定数目的状态变量描述。 解释器只需要保存有限的状态变量的轨迹。 对应的计算称为迭代计算过程。 ③注意: 递归过程和递归计算过程是两个不同的概念。 递归过程的计算也可能是迭代的计算过程。 练 习 1 求幂 练 习 快速求幂 过程计算 2 树形递归 【例】Fibonacci数列 树形递归 树形递归 改进:使用迭代计算过程。 规则: 练 习 1 线性递归线性迭代两种方法求解函数f 练 习 1 线性递归线性迭代两种方法求解函数f 用高阶函数做抽象 回顾:过程抽象机制 为公共的模式命名,建立抽象。 问题: 能否将同样的程序设计模式用于不同的过程? 以过程作为参数,或者以过程作为返回值。 高阶过程 能够操作过程的过程,称为高阶过程。 过程1:计算给定范围内的各整数之和。 过程2:计算给定范围内的整数的立方和。 过程3:序列求和 高阶过程-过程作为参数 公共模式(更高级别的抽象) 高阶过程sum 注:term 和 next 为过程参数。 过程1:计算给定范围内的各整数之和。 过程2:计算给定范围内的整数的立方和。 过程3:序列求和 练 习 1 用sum构造f的定积分 练 习 2 重写sum使之能够迭代执行 练 习 4 构造sum的抽象概念accumulate 高阶过程-用lambda构造过程 问题: 能否不定义作为高阶函数参数的pi-term和pi-next简单函数,而直接使用高阶函数? 高阶过程-用lambda构造过程 用lambda构造过程 (lambda (formal-parameters)body) 高阶过程-用lambda构造过程 如何创建局部变量? 高阶过程-用lambda构造过程 方法一:利用辅助过程约束局部变量。 高阶过程-用lambda构造过程 方法二:利用lambda表达式描述约束局部变量的匿 名过程。 高阶过程-用lambda构造过程 方法三:利用def

文档评论(0)

6358999 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档