Я думаю, что ты слишком много делаешь задним ходом, лично.
Нам нужен список, состоящий из cdr x
с добавлением car x
в конце. Единственная хитрость в том, что car x
не является списком, поэтому мы хотим преобразовать его в список перед добавлением:
(define (first-to-last x) (append (cdr x) (list (car x))))
Если вы хотите придерживаться основ, cons
- это действительно фундаментальный способ объединения вещей в списки, но это будет немного больше работы. В итоге вы бы определили что-то, по существу идентичное append
в терминах cons
Это довольно просто, но бессмысленно, учитывая, что append
уже существует.
Редактировать: Я думаю, если вы хотите использовать reverse
по тем или иным причинам, вы можете сделать что-то вроде этого:
(define (first-to-last x) (reverse (cons (car x) (reverse (cdr x)))))
Это немного длиннее и кажется мне неуклюжим, но все равно должно сработать.