例えば引数を3つ (一般にはn個) とる函数
(defn f [a b c] {:first a :second b :third c})
があったとして,[1 2]
(一般には長さ m (≤ n) のリストっぽいもの) が別の函数から得られるので, それに加えてもうひとつ 3
(一般には n-m 個の引数たち) を適用して (f 1 2 3)
の結果をえたい,というような状況を考えます.
例えば
((apply (partial partial f) [1 2]) 3)
あるいは
((comp (partial apply f) conj) [2 3] 4)
で所望の動作が得られるのですが,特に前者はなにをしているのかわかりづらすぎると感じます.函数の引数の途中までリストから渡したいということは稀にあるような気がします(ひょっとしてここが勘違い?).どうするのが適切でしょうか.(最近まで Haskell を触っていて clojure はやり始めたばかりなので,そもそも目指す方向が違うという気もします.最終的に (f 1 2 3)
を得られる clojure っぽい書き方が知りたいのであって,partial
に意図してこだわっているわけではありません.よろしくお願いします)