clojureの関数定義で可変長引数を使ってみる

引数につく"&"って何だろうと思ったら、可変長引数を表す記号だったのか。
引数固定の場合、引数が1つの関数に2つ以上渡すとエラーになる。

user=> (defn func1 [arg] (str arg))
#'user/func1
user=> (func1 1)
"1"
user=> (func1 1 2)
java.lang.IllegalArgumentException: Wrong number of args passed to: user$func1 (NO_SOURCE_FILE:0)

可変長引数の場合、引数1つの場合はそのまま。引数2つ以上の場合は、それをまとめてリストにする。

user=> (defn func2 [arg & more] (str arg " " more))
#'user/func2
user=> (func2 1)
"1 "
user=> (func2 1 2)
"1 (2)"
user=> (func2 1 2 3)
"1 (2 3)"