Что ж, переключая два списка таким образом (переключая позиции m и l при рекурсивном вызове append), вы получите первый элемент первого списка, за которым следует первый элемент второго списка и т. Д.
Если вы не хотите этого, вы должны оставить l в качестве первого аргумента и m
в качестве второго.Таким образом, вы получите:
(define (append l m)
(if (null? l) '()
(cons (car l) (append (cdr l) m))))
Конечно, это не работает так, как хотелось бы, потому что теперь вы получаете только первый список, и ничего не добавляется вообще.Что вам нужно сделать, это после того, как первый список полностью добавлен (т. Е. Когда l
пуст), вам нужно вернуть второй как хвост, например:
(define (append l m)
(if (null? l) m
(cons (car l) (append (cdr l) m))))