たとえば、メモ化のために、F#でゼロパラメーター関数の値ではなく関数自体を取得する必要がある場合があります。つまり、私はこれを持っています:
let memoize (f: 'a -> 'b) =
let dict = new Dictionary<'a, 'b>()
let memoizedFunc (input: 'a) =
match dict.TryGetValue(input) with
| true, x -> x
| false, _ ->
let answer = f input
dict.Add(input, answer)
answer
memoizedFunc
これは完全に機能しますが、今では次の機能があります。
let private getDataSlowOperation =
// implementation
そして、それをメモ化しようとすると、型の不一致(基本的にはの戻り型getDataSlowOperation
と型の間の不一致'a
)が発生します。次のように関数を変更することでこれを解決できます。
let private getDataSlowOperation bogus =
// implementation
これで機能しますが、メモ化を機能させるために関数のシグネチャを変更する必要があるのは奇妙に思えます。
let memoGetDataSlowOperation = memoize getDataSlowOperation
インライン宣言を試しましfun
たが、もちろん、これにより新しい無名関数が作成され、メモ化は機能しません。これを解決する方法はありますか?忘れてしまったキーワード/演算子はありますか?