This memoize function在運行時帶有空參數異常的任何類型爲() -> 'a
的函數都會失敗。記憶類型爲()的函數 - >'a
let memoize f =
let cache = System.Collections.Generic.Dictionary()
fun x ->
if cache.ContainsKey(x) then
cache.[x]
else
let res = f x
cache.[x] <- res
res
有沒有辦法寫一個記憶功能,也適用於() -> 'a
?
(我唯一的選擇,現在是使用Lazy
類型。調用x.Force()
得到的數值。)(太不只是unit -> 'a
型的,但任何其他),具有純函數
Memoize通常用於在參數用作查找鍵的參數上緩存一些計算。在這種情況下,「懶惰」是正確的工具。 – Daniel
你可以用'lazy'來包裝,例如:'let memoize f = let result = lazy(f())in fun() - > result.Value' – Daniel