Обычный и простой способ добавления двух списков выглядит следующим образом:
(define (append a b)
(if (null? a)
b
(cons (car a) (append (cdr a) b))))
Почему это работает? Когда мы достигнем последнего элемента a
, мое явно неверное мнение состоит в том, что мы будем вызывать (cons [the original list a, built out of many calls to (cons (car a) ...)] [the original list b])
. Короче говоря, я не понимаю, почему функция не возвращает (cons a b)
, которая была бы ячейкой cons
, содержащей два списка. Даже если я ошибаюсь насчет части a
, почему допустимо добавлять b
к нашему выводу в виде целого списка, не разбивая его сначала на отдельные элементы?
Я подозреваю, что рабочий пример будет иметь большое значение для ответа.