带有可变参数功能
问题描述:
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)
我看到“应用”的问题停止复发中是尾部的位置,这意味着它不会工作。但我不明白我不能如何申请变量论证函数
[注意,我知道你可以通过减少来解决这个特定的问题。只是想知道你是否可以用变量参数做尾部回调递归]
答
使函数把单个向量作为参数,而不是使用aruuments作为值序列。这将允许你摆脱申请。
(defn mymax [[a b & rest]]
(let [m (if (> a b) a b)]
(if (not rest)
m
(recur (conj rest m)))))
相关:http://*.com/questions/3670010/apply-recur-macro-in-clojure – Jonas 2012-01-08 06:28:40