WHEN和UNLESS
先来了解下IF表达式:
(if condition then-form [else-form])
其行为就是:当condition为non-NIL时则运行then-form并返回其值,否则运行else-form并返回其值。
(if (> 2 3) "yes" "no") -> "no"
(if (> 2 3) "yes") -> NIL
(if (> 3 2) "yes" "no") -> "yes"
但是稍显不足之处在于IF表达式中的then-form和else-form都是single Lisp form。所以如果想顺序执行某个分支中的所有语句,只能如下形式:
(if (spam-p current-message)
(progn
(file-in-spam-folder current-message)
(update-spam-database current-message)))
这里的PROGN操作符,可按序执行其内部的任意数目的表达式,并以最后一个表达式的值作为PROGN表达式的值返回。
在Common Lisp中提供了宏WHEN以简化上面的代码:
(when (spam-p current-message)
(fi