2016-11-29 51 views
1

中進行函數調用時會創建多少個環境框架您知道什麼時候有函數調用,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