SCIP 学习笔记 第一章

本文介绍Scheme语言的基础知识,包括程序设计的基本元素、表达式组合、命名与环境、复合过程定义等核心概念,帮助初学者快速掌握Scheme语言。

由于项目需要,学习软件Tracepro中宏操作,软件中宏操作使用Scheme语言编程,于是先学习Scheme来了解下这门语言的艺术。

笔记并不按照书上内容一步一步详细列出,写此笔记主要是用于记忆重要的需要长期复习的信息。

第一章 构造过程抽象

1. 程序设计的基本元素

每一种强有力的语言都为此提供了三种机制:

  • 基本表达形式,用于表示语言所关心的最简单的个体。
  • 组合的方法,通过他们可以从较简单的东西出发构造出复合的元素。
  • 抽象的方法,通过他们可以为复合对象命名,并将他们当做单元去操作。

1.1 表达式

组合式:构成方式就是用一堆括号括起一些表达式,形成一个表,用于表示一个过程应用。在表中最左的元素称为运算符,其他元素都称为运算对象,要得到这种组合式的值,采用的方式就是将由运算符刻画的过程应用于有关实际参数,而所谓实际参数也就是那些对象的值。例如:

(+ 4 5)

将运算符放在所有运算对象左边,这种形式称为前缀表示

前缀表示有两个优点:

  • 1.可以完全适用于可能带有任意个实参的过程。例如:(+ 8 5 6 5 5 4)。在这里不会出现歧义,因为运算符总是最左边的元素,整个表达式的范围也由括号界定。
  • 2.可以直接扩充,允许出现组合式嵌套的情况,也就是说,允许组合式的元素本身又是组合式。例如:(+ (- 8 5)  (* 5 6))。

为了便于阅读,遵循一种称为美观打印的规则,如下:

image

1.2 命名和环境

define是我们所用的语言中最简单的抽象方法,它允许我们用一个简单的名字去引用一个组合运算的结果。在写复杂程序,也就是为了去一步步的创建出越来越复杂的计算机性对象。我们可以通过一系列交互式动作,逐步创建起所需要的名字-对象关联。这种特征鼓励人们采用递增的方式去开发和调试程序。在很大程度上,这一情况出于另一个事实,那就是,一个Lisp程序通常总是由一大批相对简单的过程组成的。

(define pi 3.1415926)

1.3 组合式求值

要求值一个组合式就必须做下面的事情

  • 求值该组合式的各个子表达式
  • 将作为最左字表达式(运算符)的值得那个过程应用于相应的实际参数,所谓实际参数也就是其他子表达式(运算对象)的值。

例如:

image

树的观点可以用来看上图这种求值过程。“值向上穿行”形式的求值形式是一类更一般的计算过程的一个例子,这种计算过程称为树形积累

注意:求值规则里并没有处理定义。例如,对(define x 3)的求值并不是将define应用于它的两个实际参数:其中的一个是符号x的值,另一个是3.这是因为define的作用就是为x关联一个值(也就是说,这个括号内的东西并不是一个组合式)。一般性求值规则的这种例外称为特殊形式

1.4 复合过程

程序设计语言中有一些东西是必然会出现的,其中包括:

  • 数和算术运算是几本的数据和过程
  • 组合式的嵌套提供了一种组织起多个操作的方法
  • 定义是一个首先的抽象手段,它为名字关联相应的值。

过程定义:是一种威力强大的抽象技术,通过它可以为复合操作提供名字,而后就可以讲这样的操作作为一个单元使用。

例如:(define (squart x) (* x x))

一般形式:

                    (define (<name> <formal parameters>) <body>)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值