以一个题目来说明

(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. PHP preg_replace_callback() 函数

    preg_replace_callback 函数执行一个正则表达式搜索并且使用一个回调进行替换.高佣联盟 www.cgewang.com 语法 mixed preg_replace_callback ...

  2. C#后台实现在Grid标签中动态新增CheckBox标签(WPF中)

    页面代码 <Grid Margin="45,0,10,0" > <Grid.RowDefinitions> <RowDefinition Height ...

  3. cobbler多机定制安装

    目录 cobbler多机定制安装 1. cobbler服务端部署 2. 客户端安装 3. 定制安装配置 4. 安装 client1开机 client2开机 cobbler多机定制安装 1. cobbl ...

  4. MapReduce之GroupingComparator分组(辅助排序、二次排序)

    指对Reduce阶段的数据根据某一个或几个字段进行分组. 案例 需求 有如下订单数据 现在需要找出每一个订单中最贵的商品,如图 需求分析 利用"订单id和成交金额"作为key,可以 ...

  5. Spring事务专题(三)事务的基本概念,Mysql事务处理原理

    前言 本专题大纲: 我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可 ...

  6. 题解 Luogu P1514 【引水入城】

    有一种神奇的算法叫做floodfill 就是一个n*m的矩阵,a[i][j]为当前高度,我们可以任选一个点倒水,开始bfs,如果要搜的点没有被搜到过,并且高度小于当前的点,我们就把这个点加入队列中 而 ...

  7. day17.json模块、时间模块、zipfile模块、tarfile模块

    一.json模块 """ 所有的编程语言都能够识别的数据格式叫做json,是字符串 能够通过json序列化成字符串与如下类型: (int float bool str l ...

  8. 服务消费者(RestTemplate+Ribbon+feign)

    负载均衡 ​ spring cloud 体系中,我们知道服务之间的调用是通过http协议进行调用的.注册中心就是维护这些调用的服务的各个服务列表.在Spring中提供了RestTemplate,用于访 ...

  9. nodeJs + js 大文件分片上传

    简单的文件上传 一.准备文件上传的条件: 1.安装nodejs环境 2.安装vue环境 3.验证环境是否安装成功 二.实现上传步骤 1.前端部分使用 vue-cli 脚手架,搭建一个 demo 版本, ...

  10. SpringAOP 面向切面编程

    AOP的相关概念 AOP:全称是 Aspect Oriented Programming 即:面向切面编程. 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改 ...