Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter Clojure:对具有多个参数的函数使用筛选器_Filter_Clojure - Fatal编程技术网

Filter Clojure:对具有多个参数的函数使用筛选器

Filter Clojure:对具有多个参数的函数使用筛选器,filter,clojure,Filter,Clojure,我试图找到集合中以一个字母开头的所有值。过滤器似乎是实现这一点的最快方法。但我很难让它在两个参数下工作 这就是函数 (defn starts [letter word] (def startVal (clojure.string/starts-with? word letter) startVal) 那很好。它试图使用过滤器,这就是问题所在。我需要能够尝试多个字母,所以我不能在这里硬编码到函数中。但当我尝试输入多个值时,过滤器总是抛出错误(错误的算术数(3)) 当我转换为单参数函数时(

我试图找到集合中以一个字母开头的所有值。过滤器似乎是实现这一点的最快方法。但我很难让它在两个参数下工作

这就是函数

(defn starts [letter word]
  (def startVal (clojure.string/starts-with? word letter)
  startVal)
那很好。它试图使用过滤器,这就是问题所在。我需要能够尝试多个字母,所以我不能在这里硬编码到函数中。但当我尝试输入多个值时,过滤器总是抛出错误(错误的算术数(3))

当我转换为单参数函数时(我只传递单词,然后硬编码一个字母),然后尝试

它有效,我得到了正确的值

如何让筛选器使用两个值。通过直接写入筛选器调用的匿名函数是否可行


如果我把这一切都搞错了,可以用另一种方式编码,我也很乐意知道,但如果有解决方案,我想知道如何用这种方式使用筛选器。

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

(filter #(starts my-letter %) my-words)
或者,相当于:

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

亲爱的John,请注意,在
defn
或另一个
def
中使用
def
几乎从来都不是Clojure中您想要的(只有极少数例外情况是您到达那里时才知道的)。你经常想用
let
来代替。哦,很有趣。你介意我问为什么吗?这里的评论有点太多了。伊斯特伍德文档是我找到的最好的解释:
(filter (partial starts my-letter) my-words)