Схема сопряжения 2 списков
СХЕМА / Ракетка /R5RS
Попытка сделать рекурсивную процедуру, которая объединяет 2 списка одинакового размера. Просто не могу понять рекурсивный вызов правильно. Это то, что у меня есть, и я застрял.
(define (pairs list1 list2)
(if (or (null? list1) (null? list2))
'()
(cons (car list1) (car list2))
))
Тестовый пример: (пары '(1 2 3) '(a b c)) Желаемый выход: ((1 . A) (2 . B) (3 . C)) Токовый выход: (1 . A)
2 ответа
Решение
Вы просто должны cons
текущий результат до рекурсивного вызова процедуры и все!
(define (pairs list1 list2)
(if (or (null? list1) (null? list2))
'()
(cons (cons (car list1) (car list2))
(pairs (cdr list1) (cdr list2)))))
Будет ли это приемлемым решением?
(define pairs
(lambda (x y)
(map cons x y)))