首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Clojure中解释‘(应用部分部分args)’?

在Clojure中解释‘(应用部分部分args)’?
EN

Stack Overflow用户
提问于 2015-12-11 18:48:11
回答 1查看 338关注 0票数 3

我在编程Clojure的书里有假咖喱。

代码语言:javascript
复制
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 partial args)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 19:44:56

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

(partial + 2)返回一个函数(fn [& xs] (apply + 2 xs)),调用得到的函数调用带有1的+函数,并将所有后续的args传递给分部。

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

(fn [& xs] ...)说“获取一系列参数,并将它们称为xs”,这就像(fn [x1 x2 x3...] ...)

(partial partial)返回一个函数(fn [& xs] (apply partial xs)),它的行为与partial完全相同,因为它生成的函数直接调用带有所有参数的partial

(apply partial partial args)(partial partial arg1 arg2...)返回(fn [& xs] (apply partial arg1 arg2... xs))相同

(apply partial partial [+ 1])产生(fn [& xs] (apply partial + 1 xs))。让我们把这个结果称为g(g 2) => (apply partial + 1 [2]) => (fn [& xs] (apply + 1 2 xs)).让我们把这个结果称为h(h 4 5) => (apply + 1 2 [4 5]) => (+ 1 2 4 5)

但是,如果要省略其中一个部分:(apply partial [+ 1])生成(fn [& xs] (apply + 1 xs))),调用这个结果函数将不会返回函数,而是将参数之和为1的结果。

因此,在观察了这些行为之后,让我们尝试描述一下(apply partial partial args)

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

因此,faux-curry是一个创建创建函数o_O的函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34230508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档