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