Sec 1.4 表达式
Scheme 表达式是带返回值的结构。表达式可以是文字、变量引用、特殊形式或者过程调用。
Sec 1.4.1 文字表达式
文字常量可以使用数据的外部表示形式来编写。一般来说,外部表述必须被引起来(参见Sec 2.6 [引用], 第24页 )。但是有些外部表示也可以没有引号。
"abc" => "abc"
145932 => 145932
#t => #t
#\a => #\a
数值常量、字符串常量、字符常量和布尔常量的外部表示形式为常量本身。符号、对、列表和向量需要引用。
Sec 1.4.2 变量引用
由标识符组成的表达式(见第10页 Sec1.3.3 [标识符] )为变量引用;标识符是被引用的变量的名称。变量引用的值是存储在变量绑定位置的值。如果变量没有被绑定或未赋值,则会发出错误信号。
(define x 28)
x => 28
Sec 1.4.3 特殊形式语法
( 关键词组件 ... ... )
以一个语法关键词开头的圆括号表达式是一种特殊形式。每种特殊形式都有它自己的语法,我们会在手册的后续部分介绍。
请注意,语法关键词和变量绑定共享同一命名空间。一个局部的变量绑定会掩盖关键词语法,局部关键词语法定义会掩盖一个变量绑定。
以下列表包含了 MIT/GNU Scheme 中包含的所有初始化的语法关键词:
access and begin
case cond cons-stream
declare define
define-integrable define-structure define-syntax
delay do er-macro-transformer
fluid-let if lambda
let let* let*-syntax
let-syntax letrec letrec-syntax
local-declare named-lambda non-hygienic-macro-
transoformer
or quasiquote quote
rsc-macro-transformer sc-macro-transformer set!
syntax-rules the-environment
Sec 1.4.4 过程调用语法
(运算符 操作数 ... ... )
过程调用只需将要调用的过程(运算符)和要传递给它的参数(操作数)的表达式括在括号中即可。对运算符和操作数表达式求值,并将过程结果传递给过程结果参数。请参阅第15页第2.1节[Lambda表达式],了解更完整的说明。
过程调用表达式的另一个名称是组合。这个词更具体,因为它总是指表达;“过程调用”有时指调用过程的过程。
与Lisp的其他方言不同,Scheme 始终使用相同的求值规则求值运算符表达式和操作数表达式,并且求值顺序未指定。
(+ 3 4) =>7
((if #f = *) 3 4) =>12
在初始环境中,许多guocheng 可用作变量值;例如,上述示例中的加法和乘法过程是变量 + 和 * 的值。通过计算 lambda 表达式创建新过程。
如果运算符是一个语法关键字,则表达式不会被视为过程调用:它是一种特殊形式。
(第一章终于过完了,许多地方因为不懂,翻译的不合适,后面学习到相应部分的时候,再回来修正。SICP 第一章也过了一遍了,下午开启第二章。加油!)