S-99のメモ

09

はじめて、自分から、foldRightを使えた気がする。

def compress4[T](list: List[T]): List[T] = {
    list.foldRight(list[T]()) {
        (e, folded) => folded match {
            case Nil => e :: folded
            case head :: _ =>
                if (e == head) folded
                else e :: folded
        }
    }
}

println(compress4(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e)))

31

大学の頃に読んだFortranの入門書や、プログラマーになってから読んだJavaの入門書で
素数を求めるプログラムがこんなにかんたんに書けたことはない。
関数型言語は、リストの便利メソッドがたくさんあるからというのもあるとおもうが。

def isPrime(n: Int): Boolean = {
    List.range(1, n + 1).filter(n % _ == 0) == List(1, n)
}

println(isPrime(7))