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