gpt4 book ai didi

clojure - 匿名函数的正确语法

转载 作者:行者123 更新时间:2023-12-02 05:44:18 29 4
gpt4 key购买 nike

以下两个函数中的第一个函数 fn-apply-cmp-vals 返回在第二个函数 apply-cmp-vals 中使用的部分函数。

将 fn-apply-cmp-vals 作为匿名函数嵌入到 apply-cmp-vals 中的正确语法是什么?

(defn fn-apply-cmp-vals
[fn cmp-sos cmp-idx]
(partial fn cmp-sos cmp-idx))

(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(let [fn-cmp (fn-apply-cmp-vals ret-non-match-rows cmp-vec cmp-vec-idx)]
(map #(fn-cmp %1) cmp-vals)))

具体来说,我想将 fn-apply-cmp-vals ret-non-match-rows cmp-vec cmp-vec-idx) 替换为匿名函数而不是函数调用。谢谢。

最佳答案

让我们一步一步地详细了解这一点。

您的目标是将 fn-apply-cmp-vals 作为匿名函数内联到 apply-cmp-vals 中。所以让我们先做。这是您的函数在没有其他更改的情况下的样子:

(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(let [fn-cmp ((fn [f cmp-sos cmp-idx] (partial f cmp-sos cmp-idx))
ret-non-match-rows cmp-vec cmp-vec-idx)]
(map #(fn-cmp %1) cmp-vals)))

这实现了您的目标,但还有改进的余地。由于您的函数只是使用给定的参数调用 partial,因此让我们将匿名函数替换为使用正确的参数直接调用 partial。这是有效的,因为 partial 返回一个部分应用的函数。

(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(let [fn-cmp (partial ret-non-match-rows cmp-vec cmp-vec-idx)]
(map #(fn-cmp %1) cmp-vals)))

现在,让我们看看在哪里使用了fn-cmp。它在自己的匿名函数中使用一个参数被调用。由于您的部分函数满足此要求,因此您可以直接将 fn-cmp 传递给 map 函数。

(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(let [fn-cmp (partial ret-non-match-rows cmp-vec cmp-vec-idx)]
(map fn-cmp cmp-vals)))

最后,如果您愿意,可以完全删除 let 形式:

(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(map (partial ret-non-match-rows cmp-vec cmp-vec-idx) cmp-vals)))

事实证明你根本不需要匿名函数!

关于clojure - 匿名函数的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485975/

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