【问题标题】:Interpreter, if statement and let解释器,if 语句和 let
【发布时间】:2014-03-29 20:03:21
【问题描述】:

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

【问题讨论】:

  • 您可以将if 实现为一个函数,但如果这样做,您需要将thenelse 部分函数实现,以便您可以延迟它们的评估。

标签: if-statement scheme interpreter let


【解决方案1】:

Scheme 中的if 语句如下所示:

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

并且被定义为仅当&lt;predicate&gt; 不为假时,&lt;consequent&gt; 才被评估,并且仅当&lt;alternate&gt;评估 987654326@ 是假的。所以你可以看到类似的东西

(if #t (display "okay") (shut-down-the-nsa))

永远不会真正关闭 NSA。

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

(<operator> <operand> …)

然后每个&lt;operand&gt; 总是被评估。在if 语句的上下文中,这意味着&lt;consequent&gt;&lt;alternate&gt; 都将被评估——那么if 就不会太多了。

【讨论】:

  • 非常感谢您的有用回答。你能解释一下“让”功能吗?
  • @sara_123 Let 只是语法糖。 (let ((x 2) (y 3)) (+ x y)) 与 ((lambda (x y) (+ x y)) 2 3) 相同,但在解释器中不一定以这种方式实现。
猜你喜欢
  • 2016-08-15
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2018-09-16
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多