Groovy, Scala, F#, Haskell による関数・クロージャの合成
Groovy 1.8 のクロージャ合成の機能を試したついでに、Scala, F#, Haskell での関数合成の機能も簡単にまとめてみました。
サンプルのソースコードは http://github.com/fits/try_samples/tree/master/blog/20101213/
Groovy の場合
Groovy では >> や << を使います。(1.8 から導入された Closure composition の機能)
- Groovy 1.8.0 beta2
compose_sample.groovy
def plus = {x -> x + 3} def times = {x -> x * 2} def f = plus >> times def g = plus << times // times(plus(4)) = 14 println f(4) // plus(times(4)) = 11 println g(4)
Scala の場合
Scala では andThen や compose 等を使います。
- Scala 2.8.1
compose_sample.scala
val plus = (x: Int) => x + 3 val times = (x: Int) => x * 2 val f = plus andThen times val g = plus compose times // times(plus(4)) = 14 println(f(4)) // plus(times(4)) = 11 println(g(4))
F# の場合
F# では Groovy と同様に >> や << を使います。
- F# 2.0.0
compose_sample.fs
let plus x = x + 3 let times x = x * 2 let f = plus >> times let g = plus << times // times(plus(4)) = 14 printfn "%i" (f 4) // plus(times(4)) = 11 printfn "%i" (g 4)