Clojure:将过滤器与具有多个参数的函数一起使用

时间:2018-11-16 07:20:53

标签: filter clojure

我正在尝试查找集合中以一个字母开头的所有值。过滤器似乎是最快的方法。但是我很难让它与两个参数一起使用。

这是功能

(defn starts [letter word]
  (def startVal (clojure.string/starts-with? word letter)
  startVal)

很好。它试图在那上面使用过滤器。我需要能够尝试多个字母,所以我不能仅仅将其硬编码到此处的函数中。但是filter总是会抛出错误(当我尝试向其提供多个值时,错误的Arity(3)。

当我开始更改为一个参数函数时(先传递单词,然后硬编码字母),然后尝试

(println (filter starts [this is my example collection of words])

它起作用了,我得到了正确的价值。

如何获取过滤器以使用两个值。通过直接写到过滤器调用中的匿名函数可以做到吗?

如果我要解决所有这些错误,并且也可以以另一种方式编写代码(我也很高兴知道),但是如果有解决方案,我想弄清楚如何以这种方式使用过滤器。

1 个答案:

答案 0 :(得分:2)

filter需要一个参数的函数。如果其中一个参数保持不变,则可以使用匿名的一参数包装函数:

(filter #(starts my-letter %) my-words)

或者,等效地:

(filter (partial starts my-letter) my-words)