的短格式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