Scheme 评价顺序复合程序元循环';应用';
我正在研究一个元循环方案评估器及其实现。我很难理解用户定义的过程是如何由其Scheme 评价顺序复合程序元循环';应用';,scheme,evaluation,sicp,mit-scheme,order-of-execution,Scheme,Evaluation,Sicp,Mit Scheme,Order Of Execution,我正在研究一个元循环方案评估器及其实现。我很难理解用户定义的过程是如何由其apply过程处理的 元循环评估器由两个主要过程组成:eval和apply。基本思想是递归地应用eval,直到只有自评估表达式(如数字和字符串)或带有原始过程的表达式可以由apply直接处理 evaluator按照以下步骤工作:我们将变量绑定到它们的关联值,并在每次调用lambda时创建新的帧。过程定义是这样处理的。过程名称在环境中绑定,当调用它时,它的主体将在一个新的框架中求值,其中参数已绑定到用于调用它的参数 此特定部
apply
过程处理的
元循环评估器由两个主要过程组成:eval
和apply
。基本思想是递归地应用eval
,直到只有自评估表达式(如数字和字符串)或带有原始过程的表达式可以由apply
直接处理
evaluator按照以下步骤工作:我们将变量绑定到它们的关联值,并在每次调用lambda
时创建新的帧。过程定义是这样处理的。过程名称在环境中绑定,当调用它时,它的主体将在一个新的框架中求值,其中参数已绑定到用于调用它的参数
此特定部分反映在apply
程序的以下行中:
(define (apply procedure arguments)
(cond (...)
((compound-procedure? procedure)
(eval-sequence
(procedure-body procedure)
(extend-environment
(procedure-parameters procedure)
arguments
(procedure-environment procedure))))
(...)
(eval-sequence
(extend-environment
(procedure-parameters procedure)
arguments
(procedure-environment procedure))
(procedure-body procedure))
例如:
(define (square x) (* x x))
(square 5)
第一行将square
绑定到lambda(及其相关参数和主体)。此绑定将在第二行中识别。然后我知道我们创建了一个新的框架,其中x=5
,只有到那时方体才会被执行。但是apply
过程似乎颠倒了这个顺序,在这个过程中,在将参数绑定到参数之前,对过程的主体进行评估
如果有人能帮助我理解这个问题,我将不胜感激。(过程体过程)
不计算过程体,它只是返回它
程序主体通过eval序列
进行评估。它接收新环境作为第二个参数,该环境由extend-environment
创建,它将所有参数绑定添加到环境中
然后eval sequence
在扩展环境的范围内评估过程主体。非常感谢。我忽略了eval sequence
接受环境作为第二个参数,在本例中由extend environment
提供。