このコードでは、
(defn faux-curry [& args] (apply partial partial args))
この部分をどのように理解すればよいですか:
(apply partial partial args)
私の理解では、「部分的」は関数といくつかの値を取り、元の関数の変数の一部が固定された新しい関数を返します。最初の「部分的」に適用されますか..引数で何かを行う2番目の「部分的」?? 理解するためのより良い方法はありますか?
このコードでは、
(defn faux-curry [& args] (apply partial partial args))
この部分をどのように理解すればよいですか:
(apply partial partial args)
私の理解では、「部分的」は関数といくつかの値を取り、元の関数の変数の一部が固定された新しい関数を返します。最初の「部分的」に適用されますか..引数で何かを行う2番目の「部分的」?? 理解するためのより良い方法はありますか?
サンプル引数を使用して手動で評価すると役立つ場合があります。
(apply partial partial [+ 1 2 3]) ; 1.
; =>
(partial partial + 1 2 3) ; 2.
; =>
(fn [& args] (apply partial + 1 2 (concat [3] args))) ; 3.
faux-curry
in 1.;の本体でサンプル引数を置き換えています。次にapply
、2.で手で適用します。次に、3. で最初のpartial
ものを手動で適用します ( 3. の実際には、コンパイル済みコード[3]
の外側への「残りの引数」のシーケンスになることに注意してください)。partial
注意すべき重要なことは、partial
は他の関数と同様であるため、特に、それ自体が最初の引数として に渡される可能性があるということpartial
です。