有没有一种好的算法可以在Clojure中同时计算三个seq的笛卡尔积?
我正在使用Clojure进行一个小型业余项目,主要是为了学习这门语言及其并发特性。在我的项目中,我需要计算三个seq的笛卡尔积(并对结果执行某些操作)。
我发现clojure.contrib.combinatorics中的cartesian-product函数效果不错。然而,计算笛卡尔积竟成为程序的瓶颈。因此,我想并行执行计算。
现在,对于map函数,有一个方便的pmap替代品,可以神奇地实现并发。这很酷 : )。不幸的是,对于cartesian-product这样的函数,没有类似的东西。我已经查看了源代码,但我找不到自己轻松实现并发的方法。
此外,我尝试使用map实现算法,但我想我的算法技能已经退化了。我成功地为两个seq想出了一个丑陋的算法,但对于三个seq来说,这绝对是太难了。
那么,有没有人知道已经是并发的算法,或者我可以自己并行化的算法呢?
编辑
换句话说,我真正想实现的是,实现类似于这段Java代码的功能:
我正在使用Clojure进行一个小型业余项目,主要是为了学习这门语言及其并发特性。在我的项目中,我需要计算三个seq的笛卡尔积(并对结果执行某些操作)。
我发现clojure.contrib.combinatorics中的cartesian-product函数效果不错。然而,计算笛卡尔积竟成为程序的瓶颈。因此,我想并行执行计算。
现在,对于map函数,有一个方便的pmap替代品,可以神奇地实现并发。这很酷 : )。不幸的是,对于cartesian-product这样的函数,没有类似的东西。我已经查看了源代码,但我找不到自己轻松实现并发的方法。
此外,我尝试使用map实现算法,但我想我的算法技能已经退化了。我成功地为两个seq想出了一个丑陋的算法,但对于三个seq来说,这绝对是太难了。
那么,有没有人知道已经是并发的算法,或者我可以自己并行化的算法呢?
编辑
换句话说,我真正想实现的是,实现类似于这段Java代码的功能:
for (ClassA a : someExpensiveComputation()) {
for (ClassB b : someOtherExpensiveComputation()) {
for (ClassC c : andAnotherOne()) {
// Do something interesting with a, b and c
}
}
}