关于静态和动态范围问题的问题

发布于 2024-10-28 12:03:23 字数 539 浏览 4 评论 0原文

您能否确认我对以下代码的回答:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那支青花 2024-11-04 12:03:23

如果 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 in sub1 would shadow the one declared in main, even within sub2. But the x declared in sub2 would not affect the value of the x declared in sub1, so sub1 still uses the original value 6 when it reads x after calling sub2.

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.

趁微风不噪 2024-11-04 12:03:23

我不知道静态和动态是什么意思。 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?)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文