20

コレクションのマッピング内で結果を見つけるためのイディオムは次のようになります。

list.view.map(f).find(p)

ここでlistは 、List[A]fA => BpですB => Boolean

view並列コレクションで使用できますか? 非常に奇妙な結果が得られているため、質問します。

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val f : Int => Int = i => {println(i); i + 10}
f: Int => Int = <function1>

scala> val list = (1 to 10).toList
list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> list.par.view.map(f).find(_ > 5)
1
res0: Option[Int] = Some(11)

scala> list.par.view.map(f).find(_ > 5)
res1: Option[Int] = None
4

1 に答える 1

1

新しい並列コレクションについて説明しているMartinOderskyetalの論文「AGenericParallelCollectionFramework を参照してください。8ページには、「並列ビュー」のセクションがあり、一緒に使用する方法viewpar使用できる方法、およびこれによってビューと並列計算の両方のパフォーマンス上の利点をどのように提供できるかについて説明しています。

あなたの特定の例に関しては、それは間違いなくバグです。メソッドも壊れており、exists1つのリストで壊れていると、他のすべてのリストでも壊れてしまうため、途中で中止される可能性のある(findそしてexists答えがあれば停止できる)操作がなんとかスレッドを壊してしまう問題だと思います。何らかの方法でプール。これは、並列コレクションに渡される関数内で例外がスローされるというバグに関連している可能性があります。その場合は、2.10で修正する必要があります。

于 2012-02-27T00:15:08.053 に答える