6

したがって、2 つの異なるスコープ ルールを使用して出力を把握する必要があるという問題があります。a=3レキシカルスコープを使用した出力がandであることは知っていますがb=1、動的スコープを使用した出力を理解するのに苦労しています。
注: 以下のコード例では C 構文を使用していますが、疑似コードとして扱いましょう。

int a,b;

int p() {
    int a, p;
    a = 0; b = 1; p = 2;
    return p;
}

void print() {
    printf("%d\n%d\n",a,b);
}

void q () {
    int b;
    a = 3; b = 4;
    print();
}

main() {
    a = p();
    q();
}

これが私が思いついたものです。動的スコープを使用すると、 および への非ローカル参照ab変更される可能性があります。だから私はa=2( p() から戻る)、そしてb=4( q() の中で)持っています。出力は2 4?

4

2 に答える 2

3

C は動的スコープ言語ではありません。違いを理解するために実験したい場合は、Perl のような、両方から選択できる言語を使用することをお勧めします。

于 2013-10-24T19:18:34.557 に答える