私は今、基本レベルでそれを理解しようとするクロージャーの初心者です。Clojureでの部分的なソースコードの明確化
私は部分的にクロージャを作成する方法を実験しており、深い理解を得るために、(source partial)
を実行してソースコードを調べるべきだと思っていました。そこ
私は私が唯一の最後の2行、すなわち「可変引数」のやり方でそれを書くと同じように定義全体が冗長であることがわかり
(defn partial
"Takes a function f and fewer than the normal arguments to f, and
returns a fn that takes a variable number of additional args. When
called, the returned function calls f with args + additional args."
{:added "1.0"
:static true}
([f] f)
([f arg1]
(fn
([] (f arg1))
([x] (f arg1 x))
([x y] (f arg1 x y))
([x y z] (f arg1 x y z))
([x y z & args] (apply f arg1 x y z args))))
([f arg1 arg2]
(fn
([] (f arg1 arg2))
([x] (f arg1 arg2 x))
([x y] (f arg1 arg2 x y))
([x y z] (f arg1 arg2 x y z))
([x y z & args] (apply f arg1 arg2 x y z args))))
([f arg1 arg2 arg3]
(fn
([] (f arg1 arg2 arg3))
([x] (f arg1 arg2 arg3 x))
([x y] (f arg1 arg2 arg3 x y))
([x y z] (f arg1 arg2 arg3 x y z))
([x y z & args] (apply f arg1 arg2 arg3 x y z args))))
([f arg1 arg2 arg3 & more]
(fn [& args] (apply f arg1 arg2 arg3 (concat more args)))))
を取得します。
これは読みやすい機能ですか、ここで何か基本的なものがありませんか?