2012-06-02 17 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).