uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

クロージャの合成

Groovy Web Consoleを見ていて気づいた事ですが、Groovy 1.8ではクロージャに対する演算子<<および>>で関数合成ができるようになってますね。

def twice = { a -> a * 2 }
def plus3 = { a -> a + 3 }
def t1 = twice >> plus3
def t2 = twice << plus3

assert t1(1)  == (1 * 2) + 3
assert t2(1)  == (1 + 3) * 2

a>>bは、b(a())の順に適用されるクロージャを返します。
a<<bは、a(b())の順です。

Groovy Web Consoleのエントリには、「誇りに思うぞ、わが息子よ」と、C++の設計者Bjourne Stroustrup氏の名前でのコメントがついてますw(ほぼ100%ニセモノだと思いますがw)