我刚开始学习clojure,而且我没有太多的函数式编程经验。假设我有一个功能:
(defn process-seq
[process]
...doing something...)
将另一个函数作为参数。这个参数应该是一个带有单个参数的函数 - 一个序列。例如:
(defn filter-odd
[sequence]
(filter odd? sequence))
所以我现在可以写:
(process-seq filter-odd)
我不喜欢的是我必须定义filter-odd函数。我想在没有定义它的情况下实现它。我想要的是通过常量谓词传递过滤器函数:奇数?。类似的东西(只是我编写的伪代码):
(process-seq filter(odd?))
这样的事情可能吗?
答案 0 :(得分:7)
您可以将匿名函数作为参数传递:
(process-seq (fn [sequence] (filter odd? sequence)))
甚至更短:
(process-seq #(filter odd? %))
或者如评论中A.Webb所述,我们可以使用partial
:
(process-seq (partial filter odd?))