我一直對於call by xxx感到困惑
一直也搞不太清楚
所以很多東西常常看起來會卡卡的
意思很多時候都只能靠印象用猜的...
針對strict和non-strict這兩種不同的evaluation stratagy
分別有幾種常見的passing style
strict的部份,主要是
Call by value
任何function call的參數傳遞都是經由數值的拷貝
也就是說,實際上傳給function的是參數的複製品
function內部對於該數值的改變是無效的
Call by reference
相反於上一個,這個會將參數的記憶體位置傳進去
也就是說function內部對於該數值的改變是直接有效的
non-strict的部份則是
Call by name
直接將參數的部份貼進去function body
copy-paste, 要用幾次就貼幾次, 就那麼簡單
有個很大的缺點,重複使用同一個參數的話
每次使用都要重新計算該參數的值
Call by need
上一個的修正版, 會將算過一次的參數存起來
避免重複計算不必要的東西
大致來說就是四種 :
先算,傳遞複製品
先算,直接傳遞
後算,直接貼上
後算,直接貼上,但是會在第一次算的時候動手腳
2008年9月29日 星期一
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言