S-表达
Scheme 中的表达式将被执行。一个 S 表达式,因为它通常被称为以 (
开头并以 )
结束。表达式的第一个成员是要执行的内容。表达式的以下成员是在表达式求值期间将发送到表达式的参数。
例如添加数字:
(+ 1 2 3)
在这种情况下,+
是一个带有多个参数的 add 函数的符号。1
,2
和 3
被发送到+
函数。
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))
这种方法的问题在于我们复制了大量代码,而唯一改变的是被调用的方法。这个例子相当简单,但是在更多条件下我们可以看到许多类似的行重复。