在处理静态作用域和动态作用域时,我感到困惑,对于这个伪代码,我必须找到两者。对于两者,我认为它应该打印出来:9 4 2 3,但是,我不能完全确定。任何帮助都会很感谢,谢谢。
g: integer
procedure B(a: integer)
x: integer
x := a X a
R(1)
procedure A(n: integer)
g := n
procedure R(m: integer)
write_integer(x)
x /:= 2 -- integer division
if x > 1
R(m + 1)
else
A(m)
procedure main() -- entry point
B(3)
write_integer(g)发布于 2012-09-05 22:23:21
如果您的语言是静态作用域的,那么变量x将只在函数B中是局部的,并且在B之外将不可见。
但是,您的语言是动态限定作用域的:当控制流第一次通过行x: integer时,变量x现在是全局可访问的。
因此,以下是事件的顺序:
B(3)分配x := 9R(1)写入4和分配打印,并调用R(3)R(3)写入9和分配x = 1,调用g = 3write_integer(g)写入3.和分配2,并调用A(3)
A(3)分配g = 3
write_integer(g)打印3.https://stackoverflow.com/questions/9561203
复制相似问题