-3

DYNAMIC SCOPING を使用した特定の擬似コードの出力はどうなるでしょうか? ここで、出力される x の値を知りたいと思います。

これは、C に似ているが動的スコープを持つ言語の単純な擬似コードです。

    integer x,y;

    p(integer n){
        x=(n+2)/(n-3);
    }

    q(){
        integer x,y;
        x=3;
        y=4;
        p(y);
        write(x);
    }

    main(){
        x=7;
        y=8;
        q();
        write(x);
    }
4

2 に答える 2

0

動的スコープでは、各識別子にバインディングのグローバル スタックがあります。x という名前のローカル変数を導入すると、バインディングがグローバル x スタック (空である可能性があります) にプッシュされ、制御フローがスコープを離れるときにポップされます。任意のコンテキストで x を評価すると、常に最上位のバインディングが生成されます。つまり、グローバル識別子は、最新の環境に関連付けられた識別子を指します。バインディング スタックは実行時にのみ存在するため、これはコンパイル時に実行できないことに注意してください。このタイプのスコープは動的スコープと呼ばれます。http://en.wikipedia.org/wiki/Scope_(computer_science)

この理論を読んだ..動的スコープを使用してこの質問に答えると、最初に main() が呼び出されたときに x=7 と y=8 がスタックにプッシュされ、次に q() が呼び出されたときに x=3 と y=4 がプッシュされます。現在、p(n) には x が宣言されていないため、q() にある x の最後の呼び出しを宣言として使用し、その値を '6' に更新します。

次に、q() のスコープが終了すると、その値がスタックからポップされ、グローバルに呼び出された x=7 および x=8 の値がそこに残るため、x=7 が出力されます。

ANS : 6 と 7 が印刷されます

于 2014-01-25T03:28:27.757 に答える