gpt4 book ai didi

Clojure : Is there any reason to detail arities in functions definition?

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

我目前正在编写具有未定义数量的函数,因此我在 clojure.core 等中寻找示例。

例如,这是 comp (clojure.core) 的定义

(defn comp
"Takes a set of functions and returns a fn that is the composition
of those fns. The returned fn takes a variable number of args,
applies the rightmost of fns to the args, the next
fn (right-to-left) to the result, etc."
{:added "1.0"
:static true}
([] identity)
([f] f)
([f g]
(fn
([] (f (g)))
([x] (f (g x)))
([x y] (f (g x y)))
([x y z] (f (g x y z)))
([x y z & args] (f (apply g x y z args)))))
([f g & fs]
(reduce1 comp (list* f g fs))))

如您所见,对于元数 [f g],代码详细说明了 2 个和 3 个参数 (x y ; x, y, z) 的值,即使它可以直接跳转到 [x & args]。

有什么性能原因吗?或者这是一个约定?我认为调用 apply 可能会影响性能,我不知道。

现实生活中我们一般最多使用3D函数和2个函数的组合,也许就是因为这个。

谢谢

最佳答案

Clojure 的核心库通常以不太惯用的方式实现,特别是出于性能原因。如果您正在编写一个对于程序中大多数代码行至关重要的函数,您可以执行相同的操作,但一般来说,这并不优雅或特别建议。

关于Clojure : Is there any reason to detail arities in functions definition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270843/

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