S-表达式

S-Expression(符号表达式)是一种源于 Lisp 编程语言的表达式形式,最初由 John McCarthy 在 1958 年提出,用于描述 Lisp 编程语言的语法结构。

Lisp 语言中,几乎所有的语法都可以被表示为 S-表达式。


表达形式

S-Expression 使用括号结构和前缀表示法,如 (add 1 2),其中 add 是操作符,后面是操作数。通过这一形式,代码结构和数据结构的嵌套关系得以简洁表达。

一个 S-表达式可以是一个原子Atom),也可以是一个列表(list)。原子包括数字、字符串、符号等。列表由零个或多个 S-表达式组成,用圆括号括起来。

例如,下面都是 S-表达式:

5
"hello"
foo
(1 2 3)
(hello world)
(+ 1 2)
(define x 10)

在 Racket 中,我们常常使用 S-表达式来表示数据和代码。例如,(1 2 3) 既可以表示一个数值列表,也可以表示一个调用函数 1 并传入参数 23 的函数调用表达式。

S-表达式的读取和计算

在 Racket 中,读取(read)和计算(eval)是两个非常重要的操作。read 是将文本转换为 S-表达式,eval 是将 S-表达式转换为值。

例如,当我们输入 (define x 10) 时,read 操作将其读取为一个由符号 define、符号 x 和数字 10 组成的列表。然后,eval 操作将此列表解释为一个变量定义,定义了一个名为 x 的变量,其值为 10

表达式的使用

数据表示

Racket 使用 S-表达式来表示各种类型的数据。

代码表示

除了数据,Racket 还使用 S-表达式来表示代码。在 Racket 中,代码就是数据。这是一种称为 "代码即数据"(Code as Data)的编程范式,也被称为 "Homoiconicity"。

4.3 编程抽象

由于 Racket 的 S-表达式具有极高的表达力,因

此我们可以通过 S-表达式实现各种复杂的编程抽象。


本文作者:Maeiee

本文链接:S-表达式

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!