【问题标题】:How To Generate Multiple Calls To Function With One Arg In Sequence如何使用一个 Arg 按顺序生成多个函数调用
【发布时间】:2012-05-07 12:48:45
【问题描述】:

我想获取一个使用(map #(nth %1 0 nil) v1) 生成的序列[44 1 11],并将其输入(映射)到对同一函数的连续调用中。我只是不确定要使用哪个 Clojure 内置函数或其他内置函数。

这里是详细信息。

给定这两个向量:

(def v1 [[44 2 3 4 5]
         [1 6 7 5 10]
         [11 12 13 14 15]])

(def v2 [[1 2 3 4 44]
         [1 6 7 5 1]
         [11 12 13 14 44]])

还有这个功能

(defn ret-non-match-rows
    "Expects a sequence of sequences, like what is returned from clojure-csv.
     Returns all csv rows that do not match cmp-val at cmp-col-idx."

    [s-o-s cmp-val cmp-col-idx]

    (filter (complement nil?) 
       (map #(if (ret-col-match %1 cmp-val cmp-col-idx) nil %1) s-o-s) ))

所以我请求帮助如何将(地图)[44 1 11] 输入到这样的 ret-non-match-rows 中

(ret-non-match-rows v2 44 4)
(ret-non-match-rows v2 44 1)
(ret-non-match-rows v2 44 11)

但使用 Clojure 内置函数来生成这些单独的调用。

谢谢。

编辑:

以下内容为我提供了我想要的,但我想知道是否有更清洁的方法。

(def ssn-1 [44 1 11])
(def tst (partial ret-non-match-rows v2 4))
(map #(tst %1) ssn-1)

我得到一个序列序列并将解析它以获得我的结果。

【问题讨论】:

  • 我无法理解这个问题。您是否在寻求帮助编写 ret-non-match-rows、ret-col-match 或其他内容?
  • v2 是干什么用的?您似乎没有在任何地方使用它。
  • 我已经编辑了原始帖子,希望它更清晰一些。
  • @octopusgrabbus 抱歉,现在更不清楚了。 v1 和 v2 中的元素如何映射到调用序列中的参数?
  • 如果第一次调用中的 4 是拼写错误(而您的意思是 44),这是有道理的,我根据这个假设做了一个答案。

标签: clojure


【解决方案1】:

也许你想要这个:

(map (partial ret-non-match-rows v2 44) (map first v1))

(假设第一个示例调用中的4 是错字,应该是44

【讨论】:

  • @octopusgrabbus 已编辑,但我不明白 4 是 v2 中匹配的列号是什么意思。列号匹配什么?
  • 我从 v1 的 col 0 中获得了第一组值。我需要将(map #(nth %1 0 nil) v1) 生成的序列[44 1 11] 的每个元素与v2 的第4 列中的每个值进行比较。第 4 列包含 [44 1 44]
  • 我接受这个,因为你的指示让我到达了我需要去的地方。我完全忘记了部分。
猜你喜欢
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多