[問題] 一個基礎程式語言問題

看板Programming作者 (堅持阿伏哥聯盟)時間14年前 (2011/03/10 23:29), 編輯推噓1(1018)
留言19則, 7人參與, 最新討論串1/2 (看更多)
有個題目看了半天實在想不出答案為什麼是這樣... 想請板上大大幫忙解答 int N = 20 int M = 30 procedure foo() int M = N int N = 40 bar() print M,N procedure bar() M = 50 問在 dynamic scoping + define-anywhere + whole-block-scope 的情況下, 執行了 foo() 之後會印出什麼東西, 或是哪裡會產生錯誤. 答案是 30, 40 (M=30, N=40) 實在想不透為什麼啊...如果是印foo圈內的M 應該被指定成 M =N =20了 (還是會變成40? 因為是define-anywhere) 就算不是, 執行過 bar() 之後, 全域的 M應該也變成 50了才對呀... 那30到底是怎麼印出來的呢? 付上其他題答案參考 static scoping+declare-before-use+declartion-to-end-of-block-scope: M=20,N=40 static scoping+declare-before-use+whole-block-scope: illegal at "int M=N" static scoping+declare-anywhere+whole-block-scope: M=40, N=40 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 208.29.54.91

03/11 14:04, , 1F
這是 SCJP 考題吼
03/11 14:04, 1F

03/12 23:32, , 2F
SCJP是什麼呢? 我題目來源是修課考古題
03/12 23:32, 2F

03/13 01:39, , 3F
這是什麼語言?
03/13 01:39, 3F

03/13 01:41, , 4F
看不懂+1 ...
03/13 01:41, 4F

03/13 01:46, , 5F
這是程式語言理論的考試題目,不是特定語言
03/13 01:46, 5F

03/13 01:48, , 6F
會不會是題目定錯了? 看來看去怎麼會跑出30?
03/13 01:48, 6F

03/14 02:32, , 7F
我也覺得很疑惑...orz
03/14 02:32, 7F

03/14 02:35, , 8F
這就是個pseudo code表示程式流程..
03/14 02:35, 8F

03/14 02:36, , 9F
根據不同scoping跟declaration方式特性有不
03/14 02:36, 9F

03/14 02:37, , 10F
同結果
03/14 02:37, 10F

03/14 12:05, , 11F
是哪本課本的?
03/14 12:05, 11F

03/14 13:29, , 12F
Programming Language Pragmatics, M.Scott
03/14 13:29, 12F

03/14 13:29, , 13F
不過題目是老師出的我想
03/14 13:29, 13F

03/14 22:01, , 14F
以 C 來看的確是 30,40
03/14 22:01, 14F

03/14 22:11, , 15F
樓上可以幫忙解釋一下嗎? 謝謝!
03/14 22:11, 15F

03/14 22:15, , 16F
而且 C 語言應該是 static scoping 不是嗎?
03/14 22:15, 16F

03/14 22:36, , 17F
用C解釋沒用.這個是要學什麼叫作scoping,
03/14 22:36, 17F

03/14 22:37, , 18F
什麼叫declaration,什麼叫definition.
03/14 22:37, 18F

03/14 22:37, , 19F
語法是一個,但scoping不同意思就不同.
03/14 22:37, 19F
文章代碼(AID): #1DULxchi (Programming)
文章代碼(AID): #1DULxchi (Programming)