// A型のリストををB型のリストに変換する関数
def map[A, B](f: A => B, list: List[A]): List[B] = {
list match {
// 先頭と残りに分ける(パターンマッチ) 関数fに先頭の要素を適用
case (head :: tail) => f(head) :: map(f, tail)
case Nil => Nil
}
}
// フィルタリングする関数
def filter[A](f: A => Boolean, list: List[A]): List[A] = {
list match {
case (head :: tail) if f(head) == true => head :: filter(f, tail)
case (head :: tail) if f(head) == false => filter(f, tail)
case Nil => Nil
}
}
// 文字を二倍する関数
val double = (c: Char) => List(c, c).mkString
// map関数を使ってみる
map(double, "abcd".toList).mkString
// 実はScalaのListには、同様の効果を持つメソッドを持っている
"abcd".toList.map(double).mkString
// 小文字かどうかを判断する関数
val isLower = (c: Char) => {c > 'a' && c < 'z'}
// filter関数を使ってみる
filter(isLower, "AbcDeFg".toList).mkString
// 実はScalaのListには、同様の効果を持つメソッドを持っている
"AbcDeFg".toList.filter(isLower).mkString