的短格式func的一個參數注意:不是Why does Clojure recur think it should only have one argument?的重複。我沒有使用循環。爲什麼重複期望使用%&
(def t
#(let [[low high] (sort %&)] {:low low :high h}))
(t 3 2)
=> {:low 2, :high 3}
鑑於此功能按預期工作。爲什麼這並不:
(def t
#(let [[low high] (sort %&)]
(if (= 0 low)
nil
(do
(println {:low low :high high})
(recur low (dec high))))))
(t 3 2)
=> java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2
鑑於它說,它期待1種說法我可以猜測,我可以讓它轉動參數到一個收集工作:
(def t
#(let [[low high] (sort %&)]
(if (= 0 low)
nil
(do
(println {:low low :high high})
(recur [low (dec high)])))))
(t 3 2)
=> {:low 2, :high 3}
{:low 2, :high 2}
{:low 1, :high 2}
{:low 1, :high 1}
nil
.. 。 但爲什麼?
+1的重構版本。 – Gert
爲了好玩,我創建了一個沒有重複發生的懶惰版本:https://www.refheap.com/paste/2691 – Jeremy
感謝您的回答。我查了一下函數定義的特殊格式,但沒有想到再次發現。該代碼只是一個簡單的例子,它做了一些事情。這個問題在代碼高爾夫中出現,我只是想知道爲什麼這樣呢? – status203