Clojure中的高阶函数

Clojure是真棒,我们都知道这一点,但这不是重点。我想知道以Haskell类的方式创建和管理高阶函数的惯用方法是什么。在Clojure我可以做以下:

(defn sum [a b] (+ a b))

但是(sum 1)不返回一个函数:它会导致错误。当然,你可以这样做:

(defn sum
  ([a] (partial + a)) 
  ([a b] (+ a b)))

在这种情况下:

user=> (sum 1)
#<core$partial$fn__3678 clojure.core$partial$fn__3678@1acaf0ed>
user=> ((sum 1) 2)
3

但它似乎不是正确的方法继续。有任何想法吗?
我不是说实现sum函数,我在更高层次的抽象。有任何惯用的模式吗?一些宏?是定义宏的最佳方法还是有替代解决方案?

有人在Clojure组有7000。你可以指定一个函数有多少参数,它会为你自己curry,直到它得到那么多。

在Clojure中默认情况下不发生的原因是,我认为我们喜欢可变函数到自动curry函数。

http://stackoverflow.com/questions/5329079/higher-order-functions-in-clojure

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Clojure中的高阶函数