Functional programming 在Scheme中进行函数调用时,会创建多少个环境帧

Functional programming 在Scheme中进行函数调用时,会创建多少个环境帧,functional-programming,scheme,Functional Programming,Scheme,正如您所知,当有函数调用时,Scheme会为每个调用创建一个新位置,并将函数参数放置到这些位置中。 例如,当你 (define r 5) (define a 3) (define (f x) (* x r)) 将在后台创建: {E} (f a) {E} (f 3) {E1} (* x r) Final: 15 我的问题是执行此代码时创建了多少个位置,以及位置模型的外观如何: (define (f a) (define (g b) (* a b)) (g (g (+ a 1))))

正如您所知,当有函数调用时,Scheme会为每个调用创建一个新位置,并将函数参数放置到这些位置中。 例如,当你

(define r 5)
(define a 3)
(define (f x) (* x r))
将在后台创建:

{E} (f a)
{E} (f 3)
{E1} (* x r)
Final: 15
我的问题是执行此代码时创建了多少个位置,以及位置模型的外观如何:

(define (f a)
  (define (g b) (* a b))
  (g (g (+ a 1))))

(f 3) -> 36

谢谢大家!

如果我正确理解您的问题,创建的环境框架如下所示:

  • E0(顶级;上下文=
    (定义(fa)…
    ):f=#
  • E1(父项=E0;上下文=
    (F3)
    ):a=3
  • E2(父项=E1;上下文=
    (定义(g b)…
    ):g=#
  • E3(父项=E2;上下文=
    (+A1)
    ):lhs=3,rhs=1
  • E4(父级=E2;上下文=内部
    (g…
    ):b=4
  • E5(父项=E4;上下文=
    (*ab)
    ):lhs=3,rhs=4
  • E6(父项=E2;上下文=外部
    (g…
    ):b=12
  • E7(父项=E6;上下文=
    (*ab)
    ):lhs=3,rhs=12