S-表达

Scheme 中的表达式将被执行。一个 S 表达式,因为它通常被称为以 ( 开头并以 ) 结束。表达式的第一个成员是要执行的内容。表达式的以下成员是在表达式求值期间将发送到表达式的参数。

例如添加数字:

(+ 1 2 3)

在这种情况下,+是一个带有多个参数的 add 函数的符号。123 被发送到+函数。

S-Expression 可以包含 S-Expressions 作为参数,如以下示例所示:

(if (< x y)
  x
  y)

哪个可以读作好像 x 小于 y 返回 x 否则返回 y。在这个例子中,我们评估条件表达式,根据解析的值,将返回 x 或 y。可以对此进行评估

(if #t x y)
x
(if #f x y)
y

初学者的一个不太明显的例子是将 S 表达式作为 S 表达式的第一个成员的一部分。这样,我们可以通过更改将被调用的函数来更改方法的行为,而无需创建具有相同参数的分支。这是一个表达式的快速示例,如果 x 低于 y,则可以添加或减去数字。

((if (< x y) + -) 
  1 2 3)

如果 x 低于 y,表达式将被评估为:

(+ 1 2 3)
6

除此以外

(- 1 2 3)
-4

正如你所看到的,Scheme 允许程序员构建复杂的代码片段,同时为程序员提供防止重复代码的工具。在其他语言中,我们可以看到相同的例子:

(if(<xy)(+ 1 2 3)( - 1 2 3))

这种方法的问题在于我们复制了大量代码,而唯一改变的是被调用的方法。这个例子相当简单,但是在更多条件下我们可以看到许多类似的行重复。