- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ProgramminginScheme.ppt
* * * * * a simple environment structure consisting of three frames, labeled I, II, and III. In the diagram, A, B, C, and D are pointers to environments. * We see here why W1 and W2 behave as independent objects. W1 and W2 have the same code * (sqrt 2) 效果 于是 局部的procedure不“污染”外部名空间; 其名在整个procedure 被调用时才绑定于此时产生的新frame内 局部procedure可访问整个procedure的参数, 从局部procdure的求值的环境与整个procedure求值环境之间的关系可以看出 更进一步 使用set!, set-car!, set-cdr! 和 cons等基本操作可构造许多数据结构,如队列,栈,table, 等等。 有兴趣可自己看SICP $3.3 小结 特征 命令式 函数式 程序员 主要关注点 如何以某种算法来完成任务;其间关注状态改变过程; 想要的是什么东西;已有的东西与之是何种映射转换关系 状态修改 重要 无 执行顺序 重要 不重要 主要 控制流 顺序语句,循环语句,条件语句;过程调用 函数作用(包括递归) 条件选择 高阶函数 主要 操作对象 (可修改的)数据; 类的实例对象 不可修改的数据对象; 函数本身作为数据 小结 函数式程序设计语言 有令人惊异的简明性 早期人们对其执行效率多有诟病,现代函数式语言已经大有改进。 当前看来,函数式语言难以广为接受的原因可能还在于其思维方式对于大多数软件开发者、常见的问题来说不够自然。 * * * * * * ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标 * * * * * * * * * * * * * * * * * * * * * 例:求二次方程的根 (define quadratic-formula (lambda (a b c) (let ((root1 0) (root2 0) (minusb 0) (radical 0) (divisor 0)) (set! minusb (- 0 b)) (set! radical (sqrt (- (* b b) (* 4 (* a c))))) (set! divisor (* 2 a)) (set! root1 (/ (+ minusb radical) divisor)) (set! root2 (/ (- minusb radical) divisor)) (cons root1 root2)))) 例:更“Scheme”的表达 (define quadratic-formula (lambda (a b c) (let ((minusb (- 0 b)) (radical (sqrt (- (* b b) (* 4 (* a c))))) (divisor (* 2 a))) (let ((root1 (/ (+ minusb radical) divisor)) (root2 (/ (- minusb radical) divisor))) (cons root1 root2))))) 赋值 赋值用以“修改状态” 。 除了set!, 常用的还有 set-car! set-cdr! (define p (list 1 2 3)) (set-car! (cdr p) two) p ? (1 two 3) (set-cdr! p ()) p ? (1) 例子 回想List的定义。如何判断一个对象是否为List? (define (mylist? ls) (if (null? ls) #t (if (pair? ls) (mylist? (cdr ls)) #f))) 使用set-cdr! 我们可能造成有环的结构 (define ls (list 1 2 3)) (set-cdr! (cdr (cdr ls)) ls) (mylist? ls) 会如何?如何解决 例: 考虑到环的存在, (define (race hare tortoise) (if (pair? hare) (let ((hare (cdr h
原创力文档


文档评论(0)