我正在尝试max
在 Clojure 中编写一个自定义函数,它应该支持一个或多个参数。但是,我遇到了一个我无法弄清楚的错误。这是以下功能:
(defn my-max [arg & rest]
(loop [m arg c rest]
(cond (empty? c) m
(> m (first c)) (recur m (rest c))
:else (recur (first c) (rest c)))))
尝试评估函数时遇到以下错误:
user> (my-max 2 3 1 4 5)
ClassCastException clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn user/my-max (NO_SOURCE_FILE:5)
我认为这会起作用,因为我假设这rest
只是一个序列。我能够让这个函数在没有可变参数签名的情况下工作,其中参数只是一个序列:
(defn my-max [coll]
(loop [m (first coll) c (rest coll)]
(cond (empty? c) m
(> m (first c)) (recur m (rest c))
:else (recur (first c) (rest c)))))