Scala 関数型デザイン&プログラミング 2章 Exercise
社内でFP in Scala勉強会が始まったので、再読がてら解いてみました。
2.1
def fib(n: Int): Int = { @annotation.tailrec def go(n: Int, prev: Int, cur: Int): Int = if (n <= 0) prev else go(n - 1, cur, prev + cur) go(n, 0, 1) }
2.2
def isSorted[A](as: Array[A], ordered: (A, A) => Boolean): Boolean = { @annotation.tailrec def go(n: Int): Boolean = if (n >= as.length) true else if (! ordered(as(n - 1), as(n))) false else go(n - 1) go(1) }
2.3
def curry[A, B, C](f: (A, B) => C): A => (B => C) = (a: A) => f(a, _)
2.4
def uncurry[A, B, C](f: A => B => C): (A, B) => C = f(_)(_)
2.5
def compose[A, B, C](f: B => C, g: A => B): A => C = (a: A) => f(g(a))