Вы можете определить функцию, используя пунктирный список для необязательных аргументов. Все необязательные аргументы будут переданы вашей функции в виде списка.
Так, например, эта функция принимает один обязательный аргумент a0
и любое количество необязательных аргументов, передаваемых в виде a-rest
list:
(define (take-many a0 . a-rest)
a-rest)
Теперь, когда вы вызываете его:
(take-many 1 20 333)
=> (20 333)
, вы можете видеть, что необязательный аргумент second и thind доступен в виде списка. Для доступа к ним вы используете стандартные средства доступа к спискам, такие как car
, cdr
, nth
и т. Д.
То же самое относится и к lambda
.
Подробнее об этом можно прочитать на Доктор Ракет: 3.8. Выражения процедур: лямбда и лямбда-кейс (ищите rest-id
).