2017-01-17 27 views
0

我一直在使用Memo从scalaz了一段时间,但是,这里要说的是,我觉得我不能够保持pure情况:函数式编程设计:在scalaz有关备忘录的情况下

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 

所以问题是每次我只能从输入列表中得到结果列表。虽然我的Memo仍然应为Map[(Int, Int), Int],因为您可以重复使用中的compute(1,2)作为s2中的第一个元素。使用可变映射应该可以解决问题。我只是想知道是否有FP解决方案。我觉得它可能与Kleisli或相似。

回答

0

你的问题可能与此类似:Pimping scalaz Memo

你会发现解决问题的方法有我想,但我有更多的话要说TrieMap(在链接的问题提出的结构)。它的线程数量很好(水平缩放非常好),但它具有相当大的操作成本。

相关问题