Точечная запись
Процедуры
+
,
*
и
list
принимают произвольное число аргументов. Один из способов определения таких процедур состоит в использовании точечной записи (dotted-tail notation). В определении процедуры список параметров с точкой перед именем последнего члена означает, что, когда процедура вызывается, начальные параметры (если они есть) будут иметь в качестве значений начальные аргументы, как и обычно, но значением последнего параметра будет список всех оставшихся аргументов. Например, если дано определение
(define (f x y . z) <??>)
то процедуру
f
можно вызывать с двумя и более аргументами. Если мы вычисляем
(f 1 2 3 4 5 6)
то в теле
f
переменная
x
будет равна
1
,
y
будет равно
2
, а
z
будет списком
(3 4 5 6)
. Если дано определение
(define (g . w) <??>)
то процедура
g
может вызываться с нулем и более аргументов. Если мы вычислим
(g 1 2 3 4 5 6)
то в теле
g
значением переменной
w
будет список
(1 2 3 4 5 6)
.
Используя эту нотацию, напишите процедуру
same-parity
, которая принимает одно или более целое число и возвращает список всех тех аргументов, у которых четность та же, что у первого аргумента. Например,
(same-parity 1 2 3 4 5 6 7)
(1 3 5 7)
(same-parity 2 3 4 5 6 7)
(2 4 6)
Комментарии отсутствуют.