2016-11-29 9 views
1

関数呼び出しがあるときに分かっているように、Schemeは呼び出しごとに新しい場所を作成し、関数パラメータをその場所に配置します。 あなたがSchemeで関数呼び出しを行ったときにいくつの環境フレームが作成されるか

(define r 5) 
(define a 3) 
(define (f x) (* x r)) 

following locations modelがバックグラウンドで作成されてい例:

{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 

ありがとうございました!

答えて

2

私が正しくあなたの質問を理解していれば、次のように作成した環境・フレームは、次のとおりです。

  • E0(トップレベル;コンテキスト= (define (f a) ...)):#<手順= F >
  • E1(親= E0 ;コンテキスト= ):A = 3
  • E2(親= E1;文脈= (define (g b) ...)):G =#<手順>
  • E3(親= E2;文脈= (+ a 1)):lhs = 3、rhs = 1
  • E4(親= E2;コンテキスト=インナー(g ...)):B = 4
  • E5(親= E4、コンテキスト= (* a b)):LHS = 3、RHS = 4
  • E6(親= E2;文脈=外側(g ...)):B = 12
  • E7(parent = E6; context = (* a b)):lhs = 3、rhs = 12
関連する問題