2012-06-12 27 views
1

我想知道在以下兩個函數的參數向量中有什麼區別 - 如果有的話。我相信我明白直覺上發生了什麼,但第一個讓我感到不安。謝謝。兩個函數的參數有什麼區別?

從#1 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)) 

回答

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))))) 
+0

感謝您的回答。所以這是一個可變的參數簽名? – octopusgrabbus

+0

是的,你可以有這樣的參數(arity)數量可以重載的函數。 –

4

只是除了賈尼·哈蒂卡嫩的回答是:

第三類型的函數的參數是可變參數數量的功能:

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

這不是真正的原始問題的一部分,只是一個音符爲了完整性。

+0

@Arthur_Ulfeldt謝謝。 – octopusgrabbus

相關問題