Julia で関数合成マクロをつくる
Julia は便利そうなのですが、Haskell から移ってくるとカッコの数が気になってきます。
せっかく Julia ではマクロが作れるので、関数合成を簡単に書けないかと考えてみました。一気に書くことができなかったので、関数列と引数を与えると合成した結果を返すマクロ @rc を用意し、さらに @compose で無名関数にするという2段構えです。
(もっとスマートな方法があれば教えてください)
macro rc(args ...) if length(args) == 1 :($(args[1])) else :($(args[1])(@rc($(args[2:end]...)))) end end macro compose(args ...) :(x -> @rc($(args ...), x)) end
rc は、recursive compose のつもり。使い方はこんな感じになります。
>>> @rc(asin, sin, 1) # => 1 >>> @compose(asin, sin) # =>(generic function with 1 method) >>> @compose(asin, sin)(1) # => 1