関数合成

やってみる。

scala> val f1 = (a:Int) => a + 1
f1: (Int) => Int = <function>

scala> val f2 = (a:Int) => a * 2
f2: (Int) => Int = <function>

scala> val fs = List(f1, f2, f1, f1, f2)
fs: List[(Int) => Int] = List(<function>, <function>, <function>, <function>, <function>)

scala> (Function chain fs)(3)
res31: Int = 20

scala> fs.reduceLeft(_ compose _)(3)
res33: Int = 17

scala> fs.reduceRight(_ compose _)(3)
res34: Int = 17

compose は普通に右から、Function の chain は左から順番に適用されるみたい。