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))
這種方法的問題在於我們複製了大量程式碼,而唯一改變的是被呼叫的方法。這個例子相當簡單,但是在更多條件下我們可以看到許多類似的行重複。