可変長引数をとる関数の定義法

2個以上の引数を要求する関数

(lambda (a b . c) 定義)

使ってみる

gosh> (define func
        (lambda (a b . c)
          (print "a=" a " b=" b " c=" c)))
func
gosh> (func 1 2)
a=1 b=2 c=()
gosh> (func 1 2 3)
a=1 b=2 c=(3)
gosh> (func 1 2 3 4)
a=1 b=2 c=(3 4)
gosh> (func 1)
 *** ERROR: wrong number of arguments for #<closure func> (required 2, got 1)
Stack Trace:
_______________________________________

1個以上の引数を要求する関数

(lambda (a . b) 定義)

使ってみる

gosh> (define func
        (lambda (a . b)
          (print "a=" a " b=" b)))
func
gosh> (func 1)
a=1 b=()
gosh> (func 1 2)
a=1 b=(2)
gosh> (func 1 2 3)
a=1 b=(2 3)
gosh> (func)
*** ERROR: wrong number of arguments for #<closure func> (required 1, got 0)
Stack Trace:
_______________________________________

0個以上の引数を要求する関数

(lambda a 定義)

使ってみる

gosh> (define func
        (lambda a
          (print "a=" a)))
func
gosh> (func)
a=()
gosh> (func 1)
a=(1)
gosh> (func 1 2)
a=(1 2)
gosh> (func 1 2 3)
a=(1 2 3)