看板 Programming 關於我們 聯絡資訊
有個題目看了半天實在想不出答案為什麼是這樣... 想請板上大大幫忙解答 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
sorkayi:這是 SCJP 考題吼 122.117.2.251 03/11 14:04
arcred:SCJP是什麼呢? 我題目來源是修課考古題 204.248.204.29 03/12 23:32
jacky810111:這是什麼語言? 140.113.92.52 03/13 01:39
kingofsdtw:看不懂+1 ... 219.86.218.101 03/13 01:41
yauhh:這是程式語言理論的考試題目,不是特定語言 218.160.212.16 03/13 01:46
yauhh:會不會是題目定錯了? 看來看去怎麼會跑出30? 218.160.212.16 03/13 01:48
arcred:我也覺得很疑惑...orz 208.29.54.91 03/14 02:32
arcred:這就是個pseudo code表示程式流程.. 208.29.54.91 03/14 02:35
arcred:根據不同scoping跟declaration方式特性有不 208.29.54.91 03/14 02:36
arcred:同結果 208.29.54.91 03/14 02:37
march20:是哪本課本的? 76.88.39.46 03/14 12:05
arcred:Programming Language Pragmatics, M.Scott 68.98.169.112 03/14 13:29
arcred:不過題目是老師出的我想 68.98.169.112 03/14 13:29
tropical72:以 C 來看的確是 30,40 180.177.76.142 03/14 22:01
arcred:樓上可以幫忙解釋一下嗎? 謝謝! 208.29.54.91 03/14 22:11
arcred:而且 C 語言應該是 static scoping 不是嗎? 208.29.54.91 03/14 22:15
yauhh:用C解釋沒用.這個是要學什麼叫作scoping,218.160.112.127 03/14 22:36
yauhh:什麼叫declaration,什麼叫definition.218.160.112.127 03/14 22:37
yauhh:語法是一個,但scoping不同意思就不同.218.160.112.127 03/14 22:37