首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匿名函数的正确语法

匿名函数的正确语法
EN

Stack Overflow用户
提问于 2012-05-08 00:57:22
回答 2查看 226关注 0票数 2

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

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

代码语言:javascript
复制
(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)。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-08 01:04:44

让我们详细了解一下这一点,一步一步来。

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

代码语言:javascript
复制
(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返回了一个部分应用的函数。

代码语言:javascript
复制
(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传递给映射函数。

代码语言:javascript
复制
(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表单:

代码语言:javascript
复制
(defn apply-cmp-vals
  [cmp-vec cmp-vals cmp-vec-idx]
  (map (partial ret-non-match-rows cmp-vec cmp-vec-idx) cmp-vals)))

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

票数 3
EN

Stack Overflow用户

发布于 2012-05-08 01:11:26

我想你要找的是:

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

除了将其参数传递给partial之外,fn-apply-cmp-vals没有做任何其他事情。

(partial ret-non-match-rows cmp-vec cmp-vec-idx)将返回一个匿名函数。

fn-cmp是一个函数,所以用(map fn-cmp com-vals)替换(map #(fn-cmp %1) cmp-vals)

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

https://stackoverflow.com/questions/10485975

复制
相关文章

相似问题

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