关于静态和动态范围问题的问题
您能否确认我对以下代码的回答:
procedure main
var x,y,z;
procedure sub1
begin
var x,z
x := 6;
z := 7;
sub2();
x := y*z + x;
print(x);
end
procedure sub2
begin
var x,y
x := 1;
y := x+z+2;
print(y);
end
begin
x := 1; y:=3; z:=5;
sub1();
sub2();
end
我得到:
静态:
<前><代码>8 27动态:
<前><代码>10 27
正确吗?
Can you confirm my answer for the following code:
procedure main
var x,y,z;
procedure sub1
begin
var x,z
x := 6;
z := 7;
sub2();
x := y*z + x;
print(x);
end
procedure sub2
begin
var x,y
x := 1;
y := x+z+2;
print(y);
end
begin
x := 1; y:=3; z:=5;
sub1();
sub2();
end
I got:
static:
8 27
dynamic:
10 27
Is that correct?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果 Pascal 支持动态作用域,那么就其本身而言,您的分析将是正确的。
sub1
中声明的z
变量将遮蔽在main
中声明的变量,即使在sub2
中也是如此代码>.但是sub2
中声明的x
不会影响sub1
中声明的x
的值,因此sub1
在调用sub2
后读取x
时仍然使用原始值6。不过,您的分析并不完整。每次应该打印三个值,而不是两个。在这两种情况下,打印的第三个值都应为 8。
If Pascal supported dynamic scoping, then your analysis would be correct, as far as it goes. The
z
variable declared insub1
would shadow the one declared inmain
, even withinsub2
. But thex
declared insub2
would not affect the value of thex
declared insub1
, sosub1
still uses the original value 6 when it readsx
after callingsub2
.Your analysis is incomplete, though. There should be three values printed each time, not just two. The third value printed should be 8 in both cases.
我不知道静态和动态是什么意思。 Pascal 始终使用最内层作用域中的变量。如果你使用它,那么结果就是 8,27。我不知道你是如何得出另一个结果的(全球范围内的一切?)
I've no idea what static vs dynamic means. Pascal always uses the variable in the innermost scope. If you use that, then 8,27 is the result. I don't know how you came to the other result (everything global?)