2012-06-02 16 views

回答

43

理由

从球拍取出的if独臂变种,以防止错误。

在功能代码中,总是使用if的双臂变体。

(if test expr-on-true expr-on-false) 

忘记第二臂expr-on-false不会导致一个语法错误,但到运行时错误(表达将返回#<void>)。

为了防止这些经常出现的功能代码中的错误,决定引入表单when以形成if的单臂变体。

(when test expr-on-true) 

除了防止意外的错误,新的形式明确地向代码读者表明,代码依赖于副作用。从标准方案

移植代码球拍

如果您尝试运行在球拍Scheme代码并看到错误消息

if: bad syntax (must have an "else" expression) 

你必须重写if表达whenunless

简单地改写:

(if test expr1) to (when test expr1) 

(if (not test) expr1) to (unless test expr1).