Scheme的文法-1985-2020历年数学建模美赛赛题(中文版)

时间:2024-07-13 19:24:28
【文件属性】:

文件名称:Scheme的文法-1985-2020历年数学建模美赛赛题(中文版)

文件大小:3MB

文件格式:PDF

更新时间:2024-07-13 19:24:28

程序设计 方法 架构 编程 面向对象

8.2 Scheme的文法 与许多其它程序设计语言不同,Scheme 的文法很简单。图 8.2 给出了完整的 Scheme 文法。10文法定 义了两种类型的语句:,即定义和表达式。文法并没有说明语句中各项之间如何隔开,不过 按照惯例,每个项之后至少放上一个空格,除非该项后紧跟的是右扩号“)”。对于分隔符的使用,Scheme 比较灵活,除了可以使用一个空格外,也可以使用多个空格、换行符或者分页符。 = (define ( ...) ) = | | ( ...) | ( ...) | (cond ( ) ...( )) | (cond ( ) ...(else )) 图 8.2 Beginning Student Scheme文法 上述两条文法描述了简单句和复合句的结构。所谓复合句,就是由多个语句组成的语句。例如,一个 函数定义由“(”、关键字 define、另一个“(”、一个非空的变量序列、一个“)”、一个表达式以及与第一个 左括号对应的“)”组成。关键字 define把这个语句和其他的语句区分开。 表达式的类别有六:变量、常量、基本操作、函数调用以及两种 cond 表达式,其中后四种表达式由 其他表达式组成。关键字 cond使条件表达式和基本操作应用、函数调用相互区分。 这是三个表达式:'all,x和(x x)。第一个表达式属于符号类型;第二个表达式是一个变量,而每个变 量都是表达式;因为 x是变量,因此第三个表达式是函数调用。 相反,下列带括号的语句不是表达式:(f define),(cond x)和()。第一个语句部分符合函数调用的外形, 但是它把 define当作变量来使用。第二个语句并不是一个正确的 cond表达式,因为第二个项只包含了一个 变量,而不是包含在括号内的一对表达式。最后一个语句只是一对括号,但语法要求每一个左括号后都要 紧跟一个不是右括号的对象。 习题 习题 8.2.1 为什么语句 1. x 2. (= y z) 3. (= (= y z) 0) 是符合文法的表达式?解释为什么下列语句不是合法的表达式: 1. (3 + 4) 2. empty?(l) 3. (x) 习题 8.2.2 为什么语句 1. (define (f x) x) 2. (define (f x) y) 3. (define (f x y) 3) 是符合文法的定义?解释为什么下列语句不是合法的定义: 1. (define (f 'x) x) 2. (define (f x y z) (x)) 3. (define (f) 10) 习题 8.2.3 判断下列语句合不合法: 10 这个语法只描述了我们目前已看到的部分 Scheme(不包括变量和结构体定义),不过它已经覆盖了整个 语言相当大的一个子集。Scheme比这个语法要大一些,本书的后续章节会继续介绍 Scheme的其他部分。


网友评论