25
在standard Scheme就可以寫爲什麼在球拍上缺少單手武裝的「if」?
(if (> x 2)
(set! x (- x 1)))
,但是這是不可能的球拍 - 球拍的if
總是需要兩個手臂。爲什麼?
在standard Scheme就可以寫爲什麼在球拍上缺少單手武裝的「if」?
(if (> x 2)
(set! x (- x 1)))
,但是這是不可能的球拍 - 球拍的if
總是需要兩個手臂。爲什麼?
理由
從球拍取出的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
表達when
或unless
。
簡單地改寫:
(if test expr1) to (when test expr1)
和
(if (not test) expr1) to (unless test expr1).