部分適用
cutという構文を使うと
(lambda (a) (func a x))
を
(cut func <> x)
って書けるそうだ。<>が引数になるような関数が作れる。
(cut func <> x) のcutを取っ払って (func <> x) にして、 さらに <> を引数にして (lambda (a) (func a x)) の出来上がり。
なんか、もう、どういう言葉を使えばいいのかよく分からん。
バインダ?カリー化?boost::bind?
他にも、
(cut func x <>) (cut <> x y)
とかもできて、それぞれ
(lambda (a) (func x a)) (lambda (f) (f x y))
と等価だと。さらには、
(cut func <> x <>)
と書けば
(lambda (a b) (func a x b))
になる。つまり、<>を増やせば引数が増えるのだと。
さらに、可変長引数の関数も作れるそうで、
(cut func <> x <...>)
と書けば
(lambda (a . b) (apply func a x b))
になる、と。
ん?
(lambda (a . b) (apply func a x b))
ってなんやねん。
applyは
(apply func argument-list)
って形、つまりfuncを適用したい複数の引数をまとめてリストにして渡すはずだよなぁ。
aとxとbバラバラに3つ渡してんのが意味分からん。