0

静的スコープと動的スコープを扱うときに混乱します。この擬似コードでは、両方を見つける必要があります。どちらの場合も、印刷する必要があると思います:9 4 2 3ただし、完全にはわかりません。助けていただければ幸いです、ありがとう。

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)
4

1 に答える 1

1

言語のスコープが静的である場合、変数xは関数に対してのみローカルになり、B外部には表示されませんB

ただし、言語は動的にスコープされます。制御フローが初めてラインを通過するときx: integer、変数xグローバルにアクセス可能になります

したがって、イベントの順序は次のとおりです。

  • B(3)割り当てますx := 9

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

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

  • R(3)書き込み2とassignxx = 1および呼び出しA(3)

  • A(3)割り当てますg = 3

  • write_integer(g)印刷し3ます。

于 2012-09-05T14:23:20.557 に答える