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).