Clojureで関数合成してみた
はじめに
id:fitsさんがいろんな言語*1で関数合成を試しておられたので楽しく拝見していたのですが、ふとClojureがないことに気付きまして、それじゃあClojureでもやってみようと思いこれを書いています。
Groovy, Scala, F#, Haskell による関数・クロージャの合成 - なんとなくな Developer のメモ
(動作確認 Clojure 1.2.0)
compose-sample.clj
(def plus #(+ % 3)) (def times #(* % 2)) ; 適用順は右から (def f (comp times plus)) (def g (comp plus times)) ; (times (plus 4)) (println (f 4)) ;=> 14 ; (plus (times 4)) (println (g 4)) ;=> 11
- #(...)は無名関数。%が暗黙の引数(1つのみの場合)。引数が複数ある場合は%1, %2, %3...となる。
- Clojureのcomp関数は適用順が右からなのに注意する。