[译]如何设计程序-第一部分(续)

 

第五节

 

符号信息

 

这些日子计算机大多数用来处理符号信息,像名字,单词,地址或图像。所有的现代程序设计语言支持至少一种标识符号信息的方式。Scheme支持几种表达符号信息的方法:符号,串,(键盘)字符,和图像。一个符号(Symbol)是一个键盘字符序列被一个单引号标记:

 

'the 'dog 'ate 'a 'chocolate 'cat! 'two^3 'and%so%on?

和数一样,符号没有继承的意义。

 

和数一样,符号是原子数据片。它们的目的是为了表示这些事物,像家庭和姓,工作标题,命令,等等。Scheme对符号仅仅提供一个基本操作:symbol=?一个比较操作。它 两个符号产生真当且仅当两个符号是一样的时:

 

1. (symbol=? 'Hello 'Hello) = true

2. (symbol=? 'Hello 'Hewdy) = false

3. (symbol=? 'Hello x) = true 如果x代表'Hello

4. (symbol=? 'Hello x) = false 如果x代表'Howdy

 

符号第一次被介绍进计算是通过研究人工智能想要设计函数。 考虑函数reply

 

5.1 符号练习

 

 

第六节 复合数据,第一部分:结构

 

函数的输入

 

6.1 结构

 

假设我们希望表示像素(有颜色的点)在我们的计算机监视器上。像素非常像一个笛卡尔点。它有一个x坐标,告诉我们像素的水平位置,和一个y坐标,告诉我们像素的垂直位置。给出两个数,我们能定位一个像素在监视器上,并且能成为一个计算机程序。

 

DrScheme的教学包用posn结构表示像素。一个posn结构组合两个数。那就是说,posn是一个包含两个值的单个值。我们能建立posn结构通过make-posn组合两个数产生一个posn。例如:

 

(make-posn 3 4)

(make-posn 8 6)

(make-posn 5 12)

 

posn结构。每个结构有同样的状态。

 

6.2 扩展练习:画一幅简单的图

 

DrScheme提供了图形教学包draw.ss,介绍简单的图形操作:

 

1.draw-solid-line,组合两个posn结构,开始点和结束点在画布上,和一个颜色。

2.draw-solid-rect组合四个参数:一个posn结构

3.draw-solid-disk,

4.draw-circle,

每个操作产生真,如果它成功的改变了画布。我们

 

6.3 结构定义

 

6.4 数据定义

 

考虑以下的表达式:

 

(make-posn 'Albert 'Meyer)

 

它包含来自两个符号的posn结构。如果我们现在应用distance-to-0对这个结构,计算失败:

 

(distance-to-0 (make-posn 'Albert 'Meyer))

=(sqrt

(+ (sqr (posn-x (make-posn 'Albert 'Meyer)))

 

6.5 为复合数据定义函数

 

6.1节到6.4节建议了函数设计

 

6.6 扩展练习:移动园和矩形

 

实现一个计算机游戏经常需要移动一个图像在一个计算机监视器上。在图13中,例如,

 

6.7 扩展练习Hangman

 

 

第七节 数据种类

 

前面的几节 我们的数据世界。我们现在必须处理包含布尔,符号和许多种类的结构的整个宇宙。让我们给这个世界引入一些秩序吧。

 

这点,我们的函数总是处理四个不同数据类的子类:

 

数字:表示数值信息

布尔:真和假

符号:表示符号信息;还有

结构:表示复合信息

 

然而,有时,函数必须处理一类数据包含数字和结构或者结构和几个不同的种类。我们学习设计这样的函数在本节。另外,我们学习如何保护函数从坏的使用。在这里,坏的使用意思是一些用户使用本来用来画圆的函数去画矩形。尽管我们

 

7.1 混合和区分数据

 

 

7.2 为混合数据设计函数

 

7.3 复合函数回顾

 

7.4 扩展练习:移动形状

 

7.5 输入错误

 

第八节 插曲1:语法和语义

 

8.2 Scheme词汇

 

Scheme的基本词汇包含五类单词

 

8.3 Scheme文法

 

许多其他程序设计语言,Scheme有一个简单的文法。

 

8.4 Scheme的含义

 

一个合法的DrScheme程序包含两个项:一个函数定义序列(Definitions窗口)和一个交互序列(在交互窗口)。每个交互 一个Scheme表达式的求值,

 

DrSheme对一个表达式求值时,它除了使用算术和代数定律转换一个表达式到一个值外不做任何事。在 数学课程,值仅仅是数字。我们也包含符号,布尔量和确实所有的常量:

 

<val>=<con>

 

值集因此仅仅是表达式集合的子集。

 

8.5 错误

 

表达式求值指导。

 

8.6 布尔表达式

 

我们当前的定义初级学生Scheme语言 两个表达式形式:andor表达式。

 

8.7 变量定义

 

程序不仅仅包含函数定义也包含变量定义,但是这些没有包含在我们的第一个文法中。

 

这儿是变量定义的文法规则:

 

<def>=(define <var><exp>)

 

8.8 结构定义

 

我们仍然不得不理解语法和语义一个Scheme结构

 

使用DrSheme验证你的解决方案

 

<def>=(define(<var><var>...<var>)<exp>)

|(define<var><exp>)

|(define-struct<var0>(var-1>...<var-n>))

<exp>=<var>

|<con>

|(<prm><exp>...<exp>)

|

 

--------------------------------------------------------------

27 我们使用不同的字体区分不同范畴的单词。常量和原始操作使用sans serif字体,变量使用斜体,关键字使用黑体。

28 这个文法描述仅仅是我们使用的部分(减去变量和结构定义),仍然覆盖一个大的子集整个语言的。Scheme是一个位更大的,我们将去了解更多在本书的其余部分。

你可能感兴趣的:(数据结构,游戏,工作,Scheme)