两个函数的参数有什么区别?

时间:2012-06-12 13:41:08

标签: clojure

我想知道以下两个函数的参数向量中的差异 - 如果有的话。我相信我理解直觉上发生了什么,但第一个让我措手不及。谢谢。

来自Stackoverflow recursion in clojure

(defn foo
  ([x] (foo x []))
  ([x current]
     (if (= x 0)
       (apply vector (sort < current))
       (recur (dec x) (conj current x)))))

和我自己的一个职能

(defn strip-csv-header
    "Pulls out first row from csv data. If column definitions, those will
     be removed; else first row of data will be removed."

    [csv-data-all]
    (let [csv-data (rest csv-data-all)]
        csv-data))

2 个答案:

答案 0 :(得分:4)

只是Jani Hartikainen的回答:

第三种类型的函数参数是变量arity函数:

(def bar [ &any-number-of-args ] (map baz any-number-of-args))

这不是原始问题的一部分,只是完整性的注释。

答案 1 :(得分:3)

foo适用于一个或两个参数,其中strip-csv-header仅适用于一个参数。

(defn foo
  ([x] (foo x [])) ; one arg path

  ([x current]     ; two args path
     (if (= x 0)
       (apply vector (sort < current))
       (recur (dec x) (conj current x)))))