PLT 板


LINE

看板 PLT  RSS
個人覺得程式語言理論在台灣相當不盛行,當然也 不用太期待預官考試能多符合理論。我這篇主要想講的 是 call-by-reference 在理論上可能的解讀方法。 我認為一般 strict 語意下之所以還要分 call-by reference 和 call-by-value, 實際上是因為程式語言 在很多情況下結合(或搞混)了參照(reference)和 參照指到的值。舉例來說這段 C: | int x = 0; 先不考慮什麼沒初始化的問題,嚴格來說 x 不像 int, 而像一個指到某個存放 int 的地方的參照。參照 本身也是一個值;在 C 中,某種程度上可以透過取址 運算得到參照本身,或是在 C++ 中,可以有 | int &x = y; 來把 y 的值(是參照!)丟給 x. 很多語言中寫 "x" 同時代表 x 這個參照和 x 這個參照指到的值。例 如 C 這一行: | x = x + 3; 左邊的 x 取的是參照的意思,右邊取的是它的值。 在這些語言中可能要靠類似 non-const lvalue 的概念 來理解。追根究底是因為程式語言自己先把兩個概念混 在一起了。在傳遞參數時,也由於同樣原因,需要發明 兩種傳遞方法(區分原本混在一起的概念);姑且稱作 call-by-value 和 call-by-reference. 我認為如果一 開始沒有混在一起,其實只要 call-by-value 就夠了。 我學過的少數程式語言中,只有 (Standard) ML, Haskell 和 Algol 68(G) 有清楚區分兩者。例如在 ML 中上面的程式碼寫法是 | let | val x = ref 0 | in | x := !x + 3 | end 需要特別寫清楚驚嘆號,而且 x 的型態是 int ref 不是 int. Haskell 中對應的是 IORef Int. Algol 68 中如果寫 | INT x := 0 實際上是下面這行的縮寫 | REF INT x = LOC INT := 0 非常清楚的指出 x 其實是個參照。不過 Algol 68 在很多狀況下允許參照自動轉成參照指到的值(類似上 面 !x 的驚嘆號不用寫)。這點就理論上來說,就稍微 比較不嚴謹一點。 順帶一題,許多人說函式語言裡面的變數不能改, 其他一般語言的變數可以改,我覺得跟理論有點距離。 我認為比較符合理論的講法是,所有語言的變數都不能 改,只是很多語言的變數其實都是參照而不是指到的值 本身;在很多語言中,參照本身是不能改的,所謂的 「可以改」是指改了參照指到的值。一些函式語言的參 照指到的值也可以換掉,只是強迫你寫下之前偷懶沒寫 的東西罷了。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.39 ※ 編輯: Favonia 來自: 140.112.30.39 (01/05 08:23)
1F:推 godfat:抱歉現在才細看。我覺得這說法還滿好的,之前不知道 ML 01/13 04:52
2F:→ godfat:可以用這種寫法... @@ 01/13 04:52
3F:→ Favonia:Haskell 因為要 "pure" 所以寫起來長了一點 xD 01/13 08:46
4F:推 ofspring:感謝你的說明 <(_ _)> 01/19 00:41







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP