程式語言考題一問 - 高考

Table of Contents

※ 引述《pringles27 (拉拉)》之銘言:
: 好奇的地方是reference不是共用記憶體
: 所以y在裡面時不是應該已變為2了嗎?
: 還是須等到}結束才把結果回寫回記憶體呢?
: 是我觀念有誤嗎? 請大大解惑??



這題 20 分,當時我全拿,這樣應該夠資格解釋。

先回答原 po 您的疑惑,您的觀念沒錯,是補習班工讀生搞錯了。



這題其實在考 Scoping,但沒考到 Scoping 的實作,算客氣了。


以 Scoping 來說,又分成:

Dynamic Scoping
Static Scoping

出題老師在題目中沒講是那一種,代表他不夠謹慎。
還好題目程式只有兩層,用那一種最後答案都會一樣。

call by value 人人都會,不講了。

講第二小題的 call by reference


若使用 Dynamic Scoping
因為 by reference 的關係 Function A 的 X 與 Program B 的 Y 共用同
一塊記憶體空間。

當 Function A 使用到沒宣告變數 Y,會沿著副程式呼叫順序反方向找 Y

執行結果為
2 2
2



若使用 Static Scoping
因為 by reference 的關係 Function A 的 X 與 Program B 的 Y 共用同
一塊記憶體空間。

當 Function A 使用到沒宣告變數 Y,會往副程式的上一層找 Y

執行結果仍為
2 2
2


======================下面沒有西斯點分隔線==============================

Scoping 再往下還有重點:

Hole In Scope 議題
保留法、預設值法

Scoping 的實作
Dynamic Scoping --> Dynamic Link
Static Scoping --> Static Link
這兩個的重點就又一堆


做這種程式語言理論類題目我是不建議用實際的程式語言去驗它,因為
Fortran 只提供靜態記憶體配置
Pascal 使用全部運算
C 語言使用捷徑運算
C 語言事實上只有 Call By Value (我知道有指標,但它底層仍是 by value)
C 語言是 Static Scoping

如果題目考 Dynamic Scoping 結果拿 C 語言去驗它,出來的答案一定是錯的



補習班請工讀生寫的擬答常常有問題,有時候工讀生會把維基百科的內容貼

過來當擬答,維基百科最為人詬病的就是文章語法不通順、巷議街談道聽塗

說,像資訊管理、系統分析這類科目很重視語法通順、用字精準,貼維基文

章當作擬答只會降低補習班自身專業形象。


國考出的題目也常常模擬兩可,甚至有誤。

君若不信,請用 LISP 去寫 103 年高考程式語言第四題看看。



emstarbucks: 查了一下資料,你是對的 !!謝謝 !! 04/22 07:49
pringles27: 感謝高手解惑 04/22 08:15
※ 編輯: fcouple (211.76.33.33), 04/22/2015 08:45:04
gary22204: 當時好像也是差不多方向考慮,不過沒全拿就是了qq 04/22 09:02
gary22204: 去年lisp改很鬆,當場唬出來(可能有唬中)拿快滿分傻眼 04/22 09:04
gary22204: 國考考過一輪才知道中文維基有多爛阿...... 04/22 09:05
lei70200: 推著眼點跟Scoping的想法 04/22 09:25
lakers110: 感謝高手 05/15 18:21

All Comments

Hedy avatarHedy2015-04-23
查了一下資料,你是對的 !!謝謝 !!
Xanthe avatarXanthe2015-04-23
感謝高手解惑
Hardy avatarHardy2015-04-27
當時好像也是差不多方向考慮,不過沒全拿就是了qq
Heather avatarHeather2015-04-28
去年lisp改很鬆,當場唬出來(可能有唬中)拿快滿分傻眼
Sandy avatarSandy2015-04-30
國考考過一輪才知道中文維基有多爛阿......
Heather avatarHeather2015-05-03
推著眼點跟Scoping的想法
Adele avatarAdele2015-05-07
感謝高手