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)
}
现在,我有s1
和s2
都在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
或相似。