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)"