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)