通过动态和静态范围输出

时间:2019-05-30 21:50:17

标签: scope dynamic-scope

我正在学习课程,但无法确定范围。每次解决时,答案都是不同的。

我找不到给出的答案并对其进行重新搜索,但无法理解。

program main;
        var x, y, z : integer;

        procedure sub1;
            var a, y : integer;
            begin{sub1}
                    a = x+z+10;
                    y = 100;
                    x = a+20;
            end{sub1}

        procedure sub2;
            var a, x : integer;

            procedure sub3;
                    var a, z : integer;
                    begin{sub3}
                        a = y
                        x = a+10;
                        z = 500;
                        call sub1;
                        y = x-z;
            end{sub3}

            begin{sub2}
                    a = 5;
                    call sub3;
                    z = z+x+100;
            end{sub2}

   begin{main}
            x = 77;
            y = 77;
            z = x+y;
            call sub2;
            print x,y,z
   end{main}

对于静态范围,结果应为:

261 -413 341 

对于动态范围,结果应为:

77 117 871

0 个答案:

没有答案