Эта функция memoize выходит из строя при любых функциях типа () -> 'a
во время выполнения с помощью Null-Argument-Exception.
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
Есть ли способ написать функцию memoize, которая также работает для () -> 'a
?
(Моя единственная альтернатива теперь использует тип Lazy
, вызывающий x.Force()
, чтобы получить значение.)