2017-01-17 3 views
0

scalaz에서 메모에 관한 경우는, 그러나, 여기에 내가 pure을 유지 할 수없는 느낀다 상황이다.기능 프로그래밍 디자인 : 나는 잠시 동안 scalaz에서 <code>Memo</code>을 사용하고

def compute(a: Int, b: Int): Int = {a+b} //an expensive computation 
val cache = Memo.immutableHashMapMemo[(Int, Int), Int]{ 
    case ((a,b)) => compute(a,b) 
} 

이제 s1s2이 모두 Set[(Int, Int)]입니다. 예 : s1 = Set((1,1), (1,2))s2 = Set((1,2), (1,3)). 각 목록은 병렬로 실행되어야한다 :

def computePar(s: Set[(Int, Int)]): Set[Int] = //using compute() in parallel 

그래서 문제는 내가 만 입력 목록에서 결과 목록을 얻을 수 있습니다 때마다입니다. 제 MemoMap[(Int, Int), Int]이어야합니다. s2의 첫 번째 요소는 s1에서 compute(1,2)을 다시 사용할 수 있기 때문입니다. 변경 가능한지도를 사용하면 문제가 해결됩니다. FP 솔루션이 있는지 궁금합니다. 나는 그것이 Kleisli 또는 이와 유사한 것일 수 있다고 생각합니다.

답변

0

귀하의 질문은 이것과 유사 할 수 있습니다 : Pimping scalaz Memo

당신은 당신의 문제에 대한 해결책을 찾을 수있다 생각,하지만 난 TrieMap (연결 질문에 제안 된 구조)에 대해 할 말이 뭔가 더있다. 스레드 수 (수평 확장 성은 매우 좋음)와 잘 맞지만 작동 비용은 상당합니다.