ScalaでProject Euler(71)

Problem 41

1〜7の順列を逆向きに出して最初の素数です。

def is_prime(n :Int) =
    Iterator.from(2).takeWhile(m => m * m <= n).forall(n % _ != 0)

def permutations[T](a :List[T]) :Iterator[List[T]] =
    if(a == Nil)
        Iterator(Nil)
    else
        for(k <- Iterator.range(0, a.size); e = a(k);
                b <- permutations(a.slice(0, k) ++ a.slice(k + 1, a.size)))
            yield a(k) :: b

def number(a :List[Int]) =
    a.foldLeft(0)(_ * 10 + _)

println (permutations(List.range(7, 0, -1)).map(number).filter(is_prime).next)