2014-12-11 1 views
2

단순한 몬테카를로 시뮬레이션을 위해 Rng 라이브러리를 사용한다고 가정합니다 (예 : post).스칼라에서 모노로이드 값의 "합"을 얻는 방법?

val d  : Rng[Double] = double 
val point : Rng[(Double, Double)] = pair(d, d) 
val points = point.stream(1000) 
val tests = points.map(point => if (insideCircle(point)) 1.0 else 0.0) 

지금 나는 fold와 함께 할 수 있지만 좀 "바로 가기"(떨어지게를 사용하고 싶습니다 tests

tests[0] |+| tests[1] |+| tests[2] ... // Rng[Double] is a monoid 

모든 항목이 필요합니다. sum: Seq[M[A]] => M[A] 같은, M이고 단조 로움). scala 또는 scalaz과 같은 기능을합니까?

+1

haskell에서는 도움이된다면'mconcat'라고합니다. – Squidly

+1

'map' 대신에'foldMap (point => ...)'를 사용하여 합계를 얻을 수 있습니다. – senia

답변

6

Scalaz는 다양한 ops을 갖는다. suml, Stream에 대한 Foldable 유형 클래스 인스턴스가 있다고 가정합니다.

관련 문제