Схема сопряжения 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)))
Другие вопросы по тегам