Существует две половины этого:
- принятие произвольного числа входных данных
- передача произвольного числа аргументов другой функции
To принять произвольное количество входных данных вместо ...
после x
, поставить один .
перед x
. Это объявляет x
в качестве аргумента "rest", и аргументы будут собраны в список для x
.
Пример:
> (define (f . x) x)
> (f "~a ~a" "foo" "bar")
(list "~a ~a" "foo" "bar")
Для передачи произвольного числа аргументов Вы можете использовать функцию apply
, которая принимает список в качестве последнего аргумента.
Пример:
> (apply printf (list "~a ~a" "foo" "bar"))
foo bar
Объединение этих данных:
> (define (f . x) (apply printf x))
> (f "~a ~a" "foo" "bar")
foo bar