gpt4 book ai didi

Clojure:分离 comp 和部分参数

转载 作者:行者123 更新时间:2023-12-04 21:58:34 27 4
gpt4 key购买 nike

假设我有一个需要两个参数的函数,并且参数的顺序会影响结果。

是否可以将第一个参数传递给 partial 或 comp 函数,然后将另一个参数传递给它,如下所示:

(defn bar [arg1 arg2] (- arg1 arg2))
(def baz (partial (bar arg1)))
(def qux (comp str (bar arg1)))

(baz arg2)
(qux arg2)

如果我想将 arg2 传递给函数,我可以这样做吗?
(def baz2 (partial (bar _ arg2)))
(def qux2 (comp str (bar _ arg2)))

(baz arg1)
(qux arg1)

最佳答案

partial只在左侧“填充”参数,所以如果你需要跳过参数,你必须使用 fn :

(def baz2 #(bar %1 arg2))

另请注意 comp要求它的所有参数都是函数,所以你的 quxqux2其实都是废话。他们应该是:
(def qux (comp str baz))
(def qux2 (comp str baz2))

一般来说,Clojure 核心函数会将最有可能改变的变量放在最后与 comp 进行组合。和 partial更自然。 (例如,集合参数在 Clojure 中几乎总是最后,除了像 into 这样的东西,在那里把它放在最前面是有意义的。)当你设计你自己的函数时,你应该坚持这个约定,这样你就可以更容易地组合你的函数.

关于Clojure:分离 comp 和部分参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140056/

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