Pascal静态和动态范围问题?

时间:2013-11-20 18:28:05

标签: dynamic static scope pascal

如果pascal使用的是动态范围,那么这个代码的结果会是什么? 通过使用静态范围,我得到了这些结果! x = 32,y = 39,z = 105

program what(output);

var 
  y, z: integer;

procedure p(x, z: integer);

  procedure a(y: integer);
  begin (* of procedure a *)
    writeln(x, y, z);
    x := x + 5;
  end;

  procedure b(x:integer);
  begin (* of procedure b *)
    writeln(x, y, z);
    y := y + 2;
    a(x + 7);
  end;
begin (* of procedure p *)
  b(32);
  writeln(x, y, z);
  a(47);
  writeln(x, y, z);
end;

procedure q(x,y:integer);
begin (* of procedure q *)
  p(x + 4, x + y);
  writeln(x, y, z);
end;

begin (* of program what *)
  y := 21; 
  z := 105; 
  q(y + 1, y + z);
  writeln(y, z);
end.

1 个答案:

答案 0 :(得分:0)

我认为主要区别在于函数a()会看到它的调用者(“b()”)x,而不是父程序(p)中的那个。