答案 0 :(得分:46)
<强>原理强>
从Racket中删除了if
的单臂变种以防止错误。
在功能代码中,我总是使用if
的双臂变体。
(if test expr-on-true expr-on-false)
忘记第二个句柄expr-on-false
不会导致语法错误,但会导致运行时错误(表达式将返回#<void>
)。
为了防止功能代码中经常出现这些错误,我们决定为when
的单臂变体引入if
形式。
(when test expr-on-true)
除了防止意外错误之外,新表格还向代码读者清楚地表明代码依赖于副作用。
将代码从标准方案移植到Racket
如果您尝试在Racket中运行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).