【问题标题】:Evaluation order for the expression ((lambda (x) (* x 2)) (+ 3 1))?表达式 ((lambda (x) (* x 2)) (+ 3 1)) 的求值顺序?
【发布时间】:2018-09-27 00:30:59
【问题描述】:

一个

((lambda (x) (* x 2)) (+ 3 1))
((lambda (x) (* x 2)) 4)
(* 4 2)
8

B

((lambda (x) (* x 2)) (+ 3 1))
(* (+ 3 1) 2)
(* 4 2)
8

我猜有 2 个版本。但我不确定哪个是正确的。

【问题讨论】:

    标签: lambda scheme racket evaluation operator-precedence


    【解决方案1】:

    第二个使用 SICP 所谓的替代。这不是真正的 lisps 所做的,它在第 1 章中被描述为一个学习练习。一旦引入了像 let get 这样的特殊形式,它就不起作用了。

    第一个使用应用顺序,是真正的方案实现,如球拍。它计算 lambda,然后计算以下表达式,然后将 lambda 生成的函数应用于计算结果 (+ 3 1)。

    This is how Gerald Sussman explains his use of the substitution model:

    如果我们要了解流程以及我们如何控制它们,那么我们必须将流程的机制映射到这些流程的行为方式。我们将拥有一个正式的或半正式的机械模型,您可以借此了解机器实际上是如何做到这一点的。实际机器是否真的按照我要告诉你的那样做,目前完全无关紧要。

    事实上,这是一个工程模型,就像 [对于] 电阻器,我们写下一个模型 V = IR — 近似正确,但不是真的;如果我通过电阻器输入足够的电流,它就会启动,因此电压并不总是与电流成正比,但对于某些目的,该模型是合适的。

    特别是,我们现在要描述的模型,我称之为替代模型,是我们用来理解过程如何工作以及过程如何工作——过程如何产生过程的最简单的模型。

    对于我们接下来几天要处理的大部分事情,这种替代模型将是准确的。但最终,我们将无法维持机器就是这样工作的错觉,我们将转向其他更具体、更具体的模型,这些模型将显示更多细节。

    【讨论】:

    • 那么两种方式都可以吗?
    • user8314628:可能的意思是球拍会做吗?没有。
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多