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