if
如果你写了一个没有部分的解释器,一些解释器(例如 Racket)会抱怨else
。为了处理这个问题,并且为了避免begin
在结果部分中有多个表达式时显式使用 a ,最好使用when
特殊形式(如果可用,因为它是非标准的):
(when #t
(set! sum1 44)
(when #t 1))
一般来说,这是 awhen
及其兄弟的结构unless
:
(when <condition> ; equivalent to (if <condition> (begin ...))
<exp1> ; consequent, no alternative
<exp2>)
(unless <condition> ; equivalent to (if (not <condition>) (begin ...))
<exp1> ; consequent, no alternative
<exp2>)
如果 consequent 和 alternative 都有多个表达式,则可以在每个部分中使用if
with a :begin
(if <condition>
(begin ; consequent
<exp1>
<exp2>)
(begin ; alternative
<exp3>
<exp4>))
...但是使用 a 会更实用,它在每个子句中都cond
隐式使用 a :begin
(cond (<condition>
<exp1> ; consequent
<exp2>)
(else ; alternative
<exp3>
<exp4>))