静态和动态范围

时间:2012-02-23 21:46:28

标签: dynamic compiler-construction static scope

我正在解决这个问题,我得到了答案:

静态地:20,16

动态:20,100

是正确的吗?

考虑下面的程序(使用Pascal语言)。什么是输出 语言是静态范围的吗?如果语言是动态范围的,那么输出是什么?

Program main;
   x: integer;
procedure f1(z: integer)
begin 
       return z * x;
   end
procedure f2(z: integer)
      int x;
   begin
       x = 2;
       return f1(z)  * x;
   end

begin /* main program */
   x = 5;
print f1(4);
   print f2(4);
end

1 个答案:

答案 0 :(得分:2)

为什么不尝试两个版本?将Perl与静态范围一起使用:

my $x = 5;
sub f1($) {
  my $z = shift;
  return $z * $x;
}
sub f2($) {
  my $z = shift;
  my $x = 2;
  return f1($z) * $x;
}
print f1(4), "\n";
print f2(4), "\n";

我得到2040。 (204 * 540(4 * 5) * 2。)

my取代所有local以获得动态范围,我得到2016。 (204 * 516(4 * 2) * 2。)

不幸的是,由于你只是发表了你的结论,没有解释,我不能指出你哪里出错了。 。