以一个题目来说明

(define (square x) (* x x))
(define (sum-squares x y)
(+ (square x) (square y)))
(define (f a)
(sum-squares (+ a 1) (* a 2)))

列如求 (f 5)

应用序

应用序则是先一步步替换子组合求值再去应用的为应用序(“evaluate the arguments and then apply”翻译为“先求参数值再应用”)

`(f 5)`展开
`(sum-squares (+ a 1) (* a 2)))`
`5`替换 `a`为
`(sum-squares (+ 5 1) (* 5 2)))`
直接进行子项求值
`(+ 5 1)`求值为`6`,`(* 5 2)`求值`10`
替换后为
`(sum-squares 6 10)`
替换`sum-squares`
`(+ (square 6) (square 10))`
替换`square`
`(+ (* 6 6) (* 10 10))`
最后求和

`136`

上面的过程可以看出是一步步传入参数值去计算子项后最后得出结果

正则序

正则序则是一步步替换所有过程直至最原始的符号(“fully expand and then reduce”翻译为完全展开后归约)

`(f 5)`展开
`(sum-squares (+ 5 1) (* 5 2)))`展开
`(+ (square (+ 5 1)) (square (* 5 2)))`展开
`(+ (* (+ 5 1) (+ 5 1)) (* (* 5 2) (* 5 2)))`最后直接归约求和

`136`

可以看出正则就是把所有过程函数全部替换调直到最原始的一些过程函数(+ * / 这些)最后归约。

SICP之应用序和正则序的更多相关文章

  1. SICP读书笔记 1.1

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  2. 【SICP感应】1 工艺和替代模式

    <计算机程序的构造和解释>这本书的目的不是要解释的编程语言的语法,它是一种. 不是在你的语句知识,但是,你要教的东西做什么. 这是一个过程,一个精神. 就是所谓的程序规则的模式. 书中用了 ...

  3. 《程序设计语言——实践之路(英文第三版)》【PDF】下载

    <程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...

  4. 《程序设计语言——实践之路【PDF】下载

    <程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...

  5. SICP-Exercise 1.5

    Exercise 1.5.  Ben Bitdiddle has invented a test to determine whether the interpreterhe is faced wit ...

  6. PL真有意思(四):控制流

    前言 对大多数计算模型而言,顺序都是基本的东西,它确定了为完成所期望的某种工作,什么事情应该最先做,什么事应该随后做,我们可以将语言规定顺序的机制分为几个类别: 顺序执行 选择 迭代 过程抽象 递归 ...

  7. 【SICP读书笔记(一)】正则序展开的特殊情况

    scheme解释器有两种实现方式,一种是应用序,先对每个参数求值,再以首过程对所有求得的参数求值. 第二种是正则序,会“完全展开然后归约”(书中原文) SICP中的练习1.5,让我困惑了一下.原题如下 ...

  8. SICP— 第一章 构造过程抽象

    SICP  Structure And Interpretation Of Computer Programs 中文第2版 分两部分  S 和 I 第一章 构造过程抽象 1,程序设计的基本元素 2,过 ...

  9. [SICP] 求值规则

    在Java语言学习中,通常不太关注求值规则. (2+4*6)*(3+5+7)这样的组合式的求值规则.通常归结为优先级问题: if.for等的求值规则通常归结为语义. 函数式编程语言的Scheme,将这 ...

随机推荐

  1. PDOStatement::fetch

    PDOStatement::fetch — 从结果集中获取下一行(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 mixed PDOStatement:: ...

  2. luogu P2510 [HAOI2008]下落的圆盘

    LINK:下落的圆盘 计算几何.n个圆在平面上编号大的圆将编号小的圆覆盖求最后所有没有被覆盖的圆的边缘的总长度. 在做这道题之前有几个前置知识. 极坐标系:在平面内 由极点 极轴 和 极径组成的坐标系 ...

  3. Hadoop学习之常用输入输出格式总结

    目的 总结一下常用的输入输出格式. 输入格式 Hadoop可以处理很多不同种类的输入格式,从一般的文本文件到数据库. 开局一张UML类图,涵盖常用InputFormat类的继承关系与各自的重要方法(已 ...

  4. x86架构: 硬件启动过程分析(附引导启动代码)

    用户按下开机键,几秒的时间,都经历了啥? 1.cpu各个寄存器赋初始值,cs.base=0xffff0000, eip=0xfff0,其他寄存器都是0,这时cs:ip得到的物理地址:0xfffffff ...

  5. Mac上使用Docker安装SQLServer

    拉取 SQL Server 2017 Docker 镜像 docker pull microsoft/mssql-server-linux:2017-latest 运行Docker镜像 docker ...

  6. 关于Linux目录访问函数总结

    Linux下目录访问函数总结,主要是涉及到的函数,以及所在头文件. 获得工作目录: #include   <unistd.h>   char   *getcwd(char   *buf,s ...

  7. Springboot使用Shiro-整合Redis作为缓存 解决定时刷新问题

    说在前面 (原文链接: https://blog.csdn.net/qq_34021712/article/details/80774649)本来的整合过程是顺着博客的顺序来的,越往下,集成的越多,由 ...

  8. 解决 SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp的问题

    连接数据库时 设置:zeroDateTimeBehavior=convertToNull

  9. 华为云的研究成果又双叒叕被MICCAI收录了!

    摘要:2020年国际医学图像计算和计算机辅助干预会议(MICCAI 2020),论文接收结果已经公布:华为云医疗AI团队和华中科技大学合作的2篇研究成果入选. 语义/实例分割问题是近年来医学图像计算领 ...

  10. 卷积神经网络 part2

    [任务一]代码练习 在谷歌 Colab 上完成代码练习,关键步骤截图,并附一些自己的想法和解读.  ● MobileNetV1 网络:简要阅读谷歌2017年的论文<MobileNets: Eff ...