作为对 SO 问题的回答,我正在构建一个循环函数,并构建了我迄今为止最复杂的解构,它奇迹般地起作用:
(defn fib?
[a b & [c & r]]
(if (= c (+ a b))
(if r
(recur b c r)
true)
false))
(fib? 0 1 1)
=> true
(fib? 2 3 5 8 13)
=> true
但我不知道为什么它应该工作。中r
使用的recur
是一个集合,这会使原始函数失败。
(fib? 2 3 [5 8 13])
=> false
我想在apply recur
那里使用类似的东西,但由于recur
是一种特殊形式,这是不可能的。所以我尝试不使用它并且它有效。是否recur
具有神奇的自动应用属性,或者还有其他我没有看到的东西。