Julia で関数合成

Julia で簡単なファイル処理をしていたら、ふと関数合成ができないかと考えた。

julia> split(strip(line))

julia> *(split, strip)(line) # こんな感じにしたい

Julia は第一級関数をもち多重ディスパッチを利用できる言語だ。なので関数合成でも簡潔かつ比較的奇麗に実装できる。

julia> *(f::Function, g::Function) = x -> f(g(x))
* (generic function with 127 methods)

julia> (split * strip)("Hello, world!\n") 
2-element Array{String,1}:
 "Hello,"
 "world!"

便利ですね。これくらい誰でも思いつきそうだが、標準ライブラリには見当たらない。

えー。多重ディスパッチの威力を見せつけるいい機会なのに。

そう思いつつググってみると、同じことを考える人はとうの昔にいたし、作者も常に念頭に置いているようだった。当たり前ですな。

remove * for function composition? · Issue #2485 · JuliaLang/julia

下手の考え休むに似たり。理由はリンク先で指摘されているが、標準に入っていない理由は端的に遅いからだそう。