Suppose I would like to calculate Pi with Monte Carlo simulation as an exercise.

I am writing a function, which picks a point in a square `(0, 1), (1, 0)` at random and tests if the point is inside the circle.

```
import scala.math._
import scala.util.Random

def circleTest() = {
  val (x, y) = (Random.nextDouble, Random.nextDouble)
  sqrt(x*x + y*y) <= 1
}

```

Then I am writing a function, which takes as arguments the test function and the number of trials and returns the fraction of the trials in which the test was found to be true.

```
def monteCarlo(trials: Int, test: () => Boolean) =
  (1 to trials).map(_ => if (test()) 1 else 0).sum * 1.0 / trials

```

... and I can calculate Pi

```
monteCarlo(100000, circleTest) * 4

```

Now I wonder if `monteCarlo` function can be improved. How would you write `monteCarlo` efficient and readable ?

For example, since the number of trials is large is it worth using a `view` or `iterator` instead of `Range(1, trials)` and `reduce` instead of `map` and `sum` ?