具有变量参数函数的 Clojure 尾调用递归



>我基本上想要这个:

(defn mymax
        ([a b] (if (> a b) a b))
        ([a b & rest] (apply recur (conj rest (mymax a b)))))

这样:(mymax 1 2 3 4)尾巴叫(mymax 2 3 4)哪个尾巴叫(mymax 3 4)

我看到"应用"停止在尾部位置重复出现的问题,这意味着它不起作用。但是我不明白我怎么不能使用适用于变量参数函数

[注意,我知道你可以用reduce来解决这个特定的问题。只是想知道你是否可以用变量参数做尾部调用递归]

使函数将单个向量作为参数,而不是使用 aruguments 作为值序列。这将允许您摆脱应用。

(defn mymax [[a b & rest]]
  (let [m (if (> a b) a b)]    
    (if (not rest)
        m 
        (recur (conj rest m)))))

最新更新