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不被执行。