Racket程序員更愿意寫沒有副作用的程序,因為純函數的代碼既容易測試又容易組合成大型程序。但是為了和外部環境無相作用,比如打印輸入,操作圖形界面,或者操作一個硬盤上的文件,我們需要序列。
4.8.1提前效果:begin
(begin expr ...+)
expr安順序執行,只返回最后一個表達式的值,其它被忽略。
很多形式,像lambda或者cond支持沒有begin序列。這些形式被當做暗含begin。
begin形式在頂層,模塊層,內部定義時有特殊作用。它可以構建在周圍上下文之外的環境。這種行為主要用在宏里。
4.8.2滯后效果:begin0
(begin0 expr ...+)
不同于begin,返回第一個表達式的值。在副作用發生在計算以后的情況下,特別是計算產生未知個數的結果的時候,它很有用。
4.8.3if效果: when unless
when用序列組合了if風格的條件,它只有then沒有else。
(when test-expr then-body ...+)
當測試表達式的結果是true,則所有的then-bodys都將被執行,且結果是最后一個表達式。
(unless test-expr then-body ...+)
不同于when,除非測試表達式的結果為#f,否則then-bodys不被執行。