通过使另一个函数的参数为常量来创建函数(clojure,新手)
我刚开始学习clojure,没有太多的函数编程经验。假设我有一个函数:通过使另一个函数的参数为常量来创建函数(clojure,新手),clojure,Clojure,我刚开始学习clojure,没有太多的函数编程经验。假设我有一个函数: (defn process-seq [process] ...doing something...) 它将另一个函数作为参数。此参数应该是接受单个参数(序列)的函数。例如: (defn filter-odd [sequence] (filter odd? sequence)) 所以我现在可以写: (process-seq filter-odd) 我不喜欢的是,我必须定义过滤奇数函数。我想实现这一目标
(defn process-seq
[process]
...doing something...)
它将另一个函数作为参数。此参数应该是接受单个参数(序列)的函数。例如:
(defn filter-odd
[sequence]
(filter odd? sequence))
所以我现在可以写:
(process-seq filter-odd)
我不喜欢的是,我必须定义过滤奇数函数。我想实现这一目标,但不需要定义它。我只想传递带有常量谓词的filter函数:odd?。类似于(我编写的伪代码):
这样做可能吗?您可以将匿名函数作为参数传递:
(process-seq (fn [sequence] (filter odd? sequence)))
甚至更短:
(process-seq #(filter odd? %))
或者如评论中所述,我们可以使用部分:
(process-seq (partial filter odd?))
您可以将匿名函数作为参数传递:
(process-seq (fn [sequence] (filter odd? sequence)))
甚至更短:
(process-seq #(filter odd? %))
或者如评论中所述,我们可以使用部分:
(process-seq (partial filter odd?))
另外(process seq(partial filter odd?)
partial不是curry。@Aralo看起来像curry,有什么区别?甚至在咖喱的评论中也提到了(def curried filter(fn[pred](fn[coll](filter pred coll)))
。在这种情况下,(偏滤奇数?
将对应于(curry filter odd?
。另请参见(process seq(偏滤奇数?)
偏滤不是curry。@Aralo看起来像curry,有什么区别吗?甚至在咖喱的评论中也提到了(def curried filter(fn[pred](fn[coll](filter pred coll)))
。在这种情况下,(偏滤奇数?
将对应于(curry filter odd?
。请参阅