gpt4 book ai didi

clojure - 在 Clojure 中解释 `(apply partial partial args)`?

转载 作者:行者123 更新时间:2023-12-02 10:10:11 26 4
gpt4 key购买 nike

我有人造 curry Programming Clojure书。

user=> (defn faux-curry [& args] (apply partial partial args))
#'user/faux-curry
user=> (def add-3 ((faux-curry +) 3))
#'user/add-3
user=> (add-3 10)
13

但是,很难理解为什么正文中需要两个部分。

Coluredocs.org ,我将 (apply f args) 作为 apply 函数的示例。如何解释(应用部分部分参数)

最佳答案

我认为理解这一点的最简单方法是扩展每个部分。

(partial + 2) 返回一个函数(fn [& xs] (应用 + 2 xs))调用结果函数会调用 + 并传入 1 并将所有后续参数传递给partial。

(apply + 2 [3 4 5])(+ 2 3 4 5)

相同

(fn [& xs] ...) 表示“采用一系列参数并将它们称为 xs”就像 (fn [x1 x2 x3...] ...)

(partialpartial) 返回一个函数(fn [& xs](应用部分 xs))它与 partial 具有完全相同的行为,因为它生成的函数只是直接使用所有参数调用 partial

(应用部分部分参数)是相同的(部分部分arg1 arg2...)返回(fn [& xs] (应用部分 arg1 arg2...xs))

(应用部分部分 [+ 1]) 产生(fn [& xs](应用部分 + 1 xs))。我们将此结果称为g(g 2) => (应用部分 + 1 [2]) => (fn [& xs] (应用 + 1 2 xs)).我们将此结果称为h(h 4 5) => (应用 + 1 2 [4 5]) => (+ 1 2 4 5)

但是如果你要省略其中一个部分:(applypartial [+ 1]) 产生(fn [& xs] (应用 + 1 xs)))调用此结果函数不会返回函数,而是将参数与 1 相加的结果。

观察这些行为后,让我们尝试描述一下(应用部分部分参数):

“创建一个函数,该函数创建一个函数,该函数使用创建时提供的参数以及调用时提供的参数应用某个函数。”

因此faux-curry是一个函数,它创建一个函数,该函数创建一个函数o_O

关于clojure - 在 Clojure 中解释 `(apply partial partial args)`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34230508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com