gpt4 book ai didi

function - let 绑定(bind)中的 Clojure 函数

转载 作者:行者123 更新时间:2023-12-02 19:08:44 25 4
gpt4 key购买 nike

如果我有一个计算结果为函数的函数

(defn func1 [c1 c2]
(fn [x1 x2]
...do some stuff with c1 c2 x1))

我在map或reduce中的其他地方使用,使用内联是否更好

(defn func2 [x y z]
(reduce (func1 x y) z (range 20)))

或者先绑定(bind)它

(defn func2 [x y z]
(let [ffunc (func1 x y)]
(reduce ffunc z (range 20))))

在第一种情况下,我会担心通过reduce的每一步都会生成一个关于x和y的新函数。

最佳答案

函数调用(func1 x y)的评估在每种情况下都会完成一次。

在 Clojure 中评估函数调用的规则包括评估作为其参数提供的所有表达式,然后使用这些值调用该函数。

如果您定义以下高阶函数:

(defn plus []
(println "calling plus")
+)

然后按以下方式调用reduce:

(reduce (plus) [0 1 2 3])

打印单个calling plus,显示函数plus仅被调用一次。

使用 let 形式时也会发生同样的事情:

(let [f (plus)]
(reduce f [0 1 2 3]))

希望有帮助。

关于function - let 绑定(bind)中的 Clojure 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16925430/

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