#list #mapping #scheme
Вопрос:
Я реализую процедуру «map2», которая принимает два списка и возвращает сумму каждого элемента. Если списки неравномерны, возвращаются только суммы самого короткого списка. Мой код таков:
(define (map2 proc items1 items2)
(if (null? items1)
'()
(cons (proc (car items1) (car items2))
(map2 proc (cdr items1) (cdr items2)))))
Примером использования должно быть:
(карты 2 ‘(1 2 3 4) ‘(3 4 5)) —> (4 6 8)
Мой вопрос в том, как реализовать часть, которая обрабатывает неравномерные списки?
Ответ №1:
Ваше решение почти правильное — вам просто нужно проверить оба списка и остановиться, когда один из них пуст.
(define (map2 proc items1 items2)
(if (or (null? items1) (null? items2))
'()
(cons (proc (car items1) (car items2))
(map2 proc (cdr items1) (cdr items2)))))
Пример:
> (map2 '(1 2 3 4) '(3 4 5))
'(4 6 8)
> (map2 * '(1 2) '(3 4 5))
'(3 8)