【问题标题】:Clojure tail call recursion with variable argument functionClojure尾调用递归与可变参数函数
【发布时间】:2012-01-08 05:24:53
【问题描述】:

我基本上想要这个:

(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)

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

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

【问题讨论】:

标签: clojure


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2012-12-30
    • 2023-03-10
    相关资源
    最近更新 更多