1

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

来自 Clojure 中的 Stackoverflow递归

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

2 回答 2

4

只是对 Jani Hartikainen 回答的补充:

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

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

这实际上不是原始问题的一部分,只是为了完整性而做的说明。

于 2012-06-12T16:55:10.983 回答
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)))))
于 2012-06-12T13:45:44.283 回答