TL;DR
内容
Clojure の関数は可変長引数を受け取れる。たとえば + は、渡された数をすべて足し合わせた結果を返す。
(+ 1 2 3 4 5) ; 15定義するには、引数名の前に & を付ける。
(defn unlimited-arguments [& args]
(println "Arguments: " args)
(println "Type of args: " (type args)))
(unlimited-arguments 1)
;; Arguments: (1)
;; Type of args: clojure.lang.ArraySeq
(unlimited-arguments 1 17 true "Radish" :clojure)
;; Arguments: (1 17 true Radish :clojure)
;; Type of args: clojure.lang.ArraySeq引数を渡さなくても実行できる。
(unlimited-arguments) ; 11 つ以上の引数を受け取るようにするには、次のように書く。
(defn unlimited-arguments [first-arg & args]
(println "First arg: " first-arg)
(println "Other args: " (type args)))
(unlimited-arguments 1)
;; First arg: 1
;; Other args: nil
(unlimited-arguments 1 17 true "Radish" :clojure)
;; First arg: 1
;; Other args: clojure.lang.ArraySeq同じように、2 つ以上の引数を受け取るようにもできる。
(defn unlimited-arguments [first-arg second-arg & args]
(println "First arg: " first-arg)
(println "Second arg: " second-arg)
(println "Other args: " (type args)))
(unlimited-arguments 1 2)
;; First arg: 1
;; Second arg: 2
;; Other args: nil
(unlimited-arguments 1 17 true "Radish" :clojure)
;; First arg: 1
;; Second arg: 17
;; Other args: clojure.lang.ArraySeq