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
通过使另一个函数的参数为常量来创建函数(clojure,新手)_Clojure - Fatal编程技术网

通过使另一个函数的参数为常量来创建函数(clojure,新手)

通过使另一个函数的参数为常量来创建函数(clojure,新手),clojure,Clojure,我刚开始学习clojure,没有太多的函数编程经验。假设我有一个函数: (defn process-seq [process] ...doing something...) 它将另一个函数作为参数。此参数应该是接受单个参数(序列)的函数。例如: (defn filter-odd [sequence] (filter odd? sequence)) 所以我现在可以写: (process-seq filter-odd) 我不喜欢的是,我必须定义过滤奇数函数。我想实现这一目标

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

(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?
。请参阅