通过使另一个函数的参数不变来创建函数(clojure,newbie)

时间:2014-02-26 03:23:36

标签: clojure

我刚开始学习clojure,而且我没有太多的函数式编程经验。假设我有一个功能:

(defn process-seq
   [process]
   ...doing something...)

将另一个函数作为参数。这个参数应该是一个带有单个参数的函数 - 一个序列。例如:

(defn filter-odd
  [sequence]
  (filter odd? sequence))

所以我现在可以写:

(process-seq filter-odd)

我不喜欢的是我必须定义filter-odd函数。我想在没有定义它的情况下实现它。我想要的是通过常量谓词传递过滤器函数:奇数?。类似的东西(只是我编写的伪代码):

(process-seq filter(odd?))

这样的事情可能吗?

1 个答案:

答案 0 :(得分:7)

您可以将匿名函数作为参数传递:

(process-seq (fn [sequence] (filter odd? sequence)))

甚至更短:

(process-seq #(filter odd? %))

或者如评论中A.Webb所述,我们可以使用partial

(process-seq (partial filter odd?))