Clojure真棒,我们都知道这一点,但那不是重点。我想知道以类似Haskell的方式创建和管理高阶函数的惯用方法是什么。在Clojure中,我可以做到以下几点: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 [email protected]>
user=> ((sum 1) 2)
3
但它似乎并不像正确的前进道路。有任何想法吗?
我不是在谈论实现sum
函数,我正在谈论更高层次的抽象。是否有任何习惯模式?一些宏?定义宏的最佳方式还是有其他解决方案吗?
感谢您的快速回复。我已经看过那篇文章,而且我想知道是否在某些clojure.contrib子包中采用了建议的解决方案,或者只是可能想法的早午餐:) – 2011-03-16 17:31:01
我可以从您的答案中推断出您认为可变函数和自动粘贴功能不兼容?如果是这样,我想更多地了解其原因。谢谢。 – day 2012-09-11 14:29:41
给定'(defn f([x] 1)([x y] 2))','(f true)'产生了什么?它必须是1,这意味着它不能作为二元版本的部分应用程序自动粘贴。 – amalloy 2012-09-11 17:48:53