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
功能,而是在更高的抽象层次上谈论。是否有任何惯用的模式可以遵循?一些宏?是定义宏的最佳方法还是有替代解决方案?