口译员,如果声明并让

时间:2014-02-26 19:03:26

标签: if-statement scheme interpreter let

为什么不能在支持函数应用程序的解释器中模拟“if-then-else”构造作为函数? Scheme中的“let”功能是否类似于“if-then-else”?

1 个答案:

答案 0 :(得分:4)

Scheme中的if语句如下所示:

(if <predicate> <consequent> <alternate>)

并且定义为<consequent>仅在<predicate>不为假并且<alternate> 评估时 em>仅当<predicate>为假时。所以你可以看到像

这样的东西
(if #t (display "okay") (shut-down-the-nsa))

永远不会真正关闭国家安全局。

但是,如果if是一个函数,例如:

(<operator> <operand> …)

然后总是评估每个<operand>。在if语句的上下文中,这意味着<consequent><alternate>都会被评估 - 当时if并不多。