我在我的軟體開發課程中被分配了這樣的問題。所以,正常的方法是一個一個地檢查每個程序并記住每個子程式的每個呼叫,但是,我是一個有點懶惰的程式員,我決定通過在實際編程語言中實作給定的偽代碼來走捷徑。
問題陳述:
procedure Main is
X, Y, Z : Integer;
procedure Sub1 is
A, Y, Z : Integer;
begin
...
end;
procedure Sub2 is
A, B, Z : Integer;
begin
...
procedure Sub4 is
A, B, W : Integer;
begin
...
end;
end;
procedure Sub3 is
A, X, W : Integer;
begin
...
end;
begin
...
end;
考慮上面的程式。給定以下呼叫序列并假設使用動態范圍,在執行最后一個激活的子程式期間哪些變數是可見的?在每個可見變數中包含宣告它的單元的名稱(例如 Main.X)。
- 主要呼叫 Sub1;Sub1 呼叫 Sub3;Sub3 呼叫 Sub2;
我的嘗試:
$x = 10;
$y = 20;
$z = 30;
sub Sub2
{
return $x;
}
sub Sub1
{
local $x = 9;
local $y = 19;
local $z = 29;
return Sub2();
}
print Sub1()."\n";
我被困在這一點上,不知道如何更改代碼以向我顯示變數。我看到這個解決方案是顯而易見的,但到目前為止我已經用 C 和 Java 進行了編碼。
uj5u.com熱心網友回復:
如果您把問這個問題的時間花在觀看教程上,那就太好了。然而,我們都曾有過這樣的經歷,對探索新語言感到困惑。下次盡量不要問你作業的答案。
所以,我看到您想使用 Perl,這是一個不錯的選擇。我自己最近也做過類似的任務,這是我的方法。
正如 R. Sebesta (2019) 在名為“編程語言的概念”(第 12 版)的書中所寫,動態范圍的最佳示例是 Perl 和 Common Lisp。基本上,它基于僅在運行時確定的子程式呼叫順序。
以下程式顯示子程式呼叫如何影響變數值:
$x = 0;
$y = 0;
$z = 0;
sub sub1
{
local $a = 1;
local $y = 1;
local $z = 1;
return sub3();
}
sub sub2
{
local $a = 2;
local $b = 2;
local $z = 2;
sub sub4
{
local $a = 4;
local $b = 4;
local $w = 4;
}
return "Sub".$a.".A, "."Sub".$b.".B, "."Sub".$w.".W, "."Sub".$x.".X,
"."Sub".$y.".Y, "."Sub".$z.".Z";
}
sub sub3
{
local $a = 3;
local $x = 3;
local $w = 3;
return sub2();
}
print sub1()."\n";
輸出: Sub2.A, Sub2.B, Sub3.W, Sub3.X, Sub1.Y, Sub2.Z
注意:如果Sub0只是Main。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/339900.html
