2012-03-05 6 views
0

私は静的スコープとダイナミックスコープを扱うときに混乱し、この擬似コードでは両方を見つけなければなりません。どちらも私はそれが印刷されるべきだと信じています:しかし、私は完全にはわかりません。どんな助けでも感謝します、ありがとう。あなたの言語を静的にスコープされた場合この演習では、静的スコープと動的スコープの違いは何ですか?

g: integer 

procedure B(a: integer) 
    x: integer 

    x := a X a 
    R(1) 

procedure A(n: integer) 
    g := n 

procedure R(m: integer) 
    write_integer(x) 
    x /:= 2  -- integer division 
    if x > 1 
     R(m + 1) 
    else 
     A(m) 

procedure main() -- entry point 
    B(3) 
    write_integer(g) 

答えて

1

、その変数xは唯一の機能Bにローカルになり、それがB外に見えません。

しかし、あなたの言語を動的にスコープさ:制御フローがラインx: integer上を通過する最初の時間は、変数xは今グローバルにアクセスです。

だから、ここのイベントの順番だ:

  • B(3)9を書き込み、x = 4を割り当て、4を書き込み、x = 2を割り当て、を呼び出し

  • R(2)R(2)

  • を呼び出し x := 9

  • R(1)を割り当て10

  • R(3)2とassignx x = 1を書き込み、g = 3

  • write_integer(g)プリント3を割り当てA(3)

  • A(3)を呼び出します。

関連する問題