이 기능은 내장 된 Memo.memo 기능을 사용하여 수행 할 수 있습니다. Memo.memo는 F => K => V 함수에서 Memo 인스턴스를 생성합니다. 이렇게하면 기본 trie에 쉽게 액세스 할 수 있습니다. 예 :
scala> def trieMemo[A, B](trie: collection.concurrent.TrieMap[A, B]) =
Memo.memo[A, B](f => k => trie.getOrElseUpdate(k, f(k)))
trieMemo: [A, B](trie: scala.collection.concurrent.TrieMap[A,B])scalaz.Memo[A,B]
scala> val trie = collection.concurrent.TrieMap[Int, Int]()
trie: scala.collection.concurrent.TrieMap[Int,Int] = TrieMap()
scala> val f = trieMemo(trie)(n => n * n)
f: Int => Int = <function1>
scala> f(5)
res0: Int = 25
scala> f(10)
res1: Int = 100
scala> trie
res2: scala.collection.concurrent.TrieMap[Int,Int] = TrieMap(5 -> 25, 10 -> 100)
패치를 추가 할 수 있습니다. 기본 가치가 필요한 이유는 무엇입니까? –
메모와 마찬가지로 구현 세부 정보를 메모 작성의 사용으로부터 숨기는 것이 바로 메모 개념에 위배되는 것이 아닌가? –