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
提供。