Groovyで合成関数

http://d.hatena.ne.jp/Kazuhira/20120415/1334486571 によるとgroovyで合成関数ができるらしい。って思ったら青い本にちゃんと書いてあった。

プログラミングGROOVY

プログラミングGROOVY

7.1. クロージャ関連の新機能のとこ。1.8からの新機能らしい。

http://docs.codehaus.org/display/GROOVY/Groovy+1.8+release+notes#Groovy18releasenotes-Closurecomposition

そもそも理系でありながら合成関数とか覚えていないが、とある関数の結果を、とある関数に渡す関数を定義できるってことで良いのだろうか?

def twice = { a -> a * 2 }
def inc = { b -> b + 1 }
assert inc(twice(3)) == 7

def twice = { a -> a * 2 }
def inc = { b -> b + 1 }
def h = inc << twice
assert h(3) == 7

と出来る。<<が味噌でtwiceの結果をincに渡すという定義。逆の>>も使える。

assert (inc << twice)(3) == 7

こんな感じで変数に一度うけないでも大丈夫。流れるような関数的な何か的なインタフェースに使えたりするだろうか?