我無法理解我們回來的作業答案。我相信我對「嵌套」函數的概念感到困惑,但也許這是錯誤的。我正在尋找一些關於遵循以下代碼中動態和靜態範圍值分配的幫助。程序語言理解 - 靜態vs動態範圍
x : integer -- global
procedure set_x(n : integer)
x := n
end
procedure print_x
write_integer(x)
end
procedure first
set_x(1)
print_x
end
procedure second
x : integer
set_x(2)
print_x
end
// program starts here
set_x(0)
first()
print_x
second()
print_x
Static Scoping Output: 1122
Dynamic Scoping Output: 1121
我的想法,因爲我經過每一個:
靜態:
- 運行
set_x(0)
,這使得一個局部變量,由於n的參數,但由於我們集合X在沒有本地聲明x(int x = ..)的情況下,我們將全局x更新爲0. - 運行
first()
,其確實爲set_x(1)
,其跟隨t他相同的邏輯將x更新爲全局1。那麼,我們先內用於打印的1 - 運行
print_x
全球x,它只是重新打印1. - 運行
second()
我們本地x聲明並運行set_x(2)
,肚裏更新2到n運行print_x
。 (因爲set
,而不是second
程序的,對不對?然後,我們運行其print_x
的過程,它打印2 - 運行
print_x
這又只是轉儲出的2 - 在1122
所得動態(更加困惑在這一個)
- 運行
set_x(0)
其設定x和全局x爲0 - 運行
first()
我們一次更新命中set_x
x到1.打印1. - 運行
print_x
我們重新打印1. - 運行
second()
我們在當地做X,我們運行set_x(2)
,並設置全局x爲2。然後,我們打印2. - 運行
print_x
最後,我們再重新打印和這裏就是我猜2,但答案應該1. - 我猜1122,實際的答案是1121
我合作nfused對動態的那最後部分,爲什麼它是1,而不是2
因此動態範圍設定爲2的原因是因爲它是在該時間點打印的局部變量,而不是全局變量x? (因爲局部x在第二個中定義)。如果這是真的,這個x在set_x方法中仍然被設置爲2,但是由於set_x是從第二個調用的,它仍然將本地x設置爲第二個而不是全局? – Austin 2014-10-17 02:18:00