I would like to reverse a list using cdr, car and cons. Since lists in lisp are asymmetrical (can only insert at the beginning), I am interested on how one would write a procedure to do that without using (append). Please review my code.
(define (reverse l)
(define (aux orig result)
(if (null? orig) result
(aux (cdr orig) (cons (car orig) result))))
(aux l '()))
Is this good enough? Are there better or more efficient ways to do this?
1 Answer 1
Given that you don't want to use append
, this looks great to me. I'm not sure if I can even think of a different way to do it.
My only suggestion would be naming related. l
is a terrible name for a variable - it's too close to 1
. orig
is questionable, since it's not really the original list, it's the list you're currently "popping" (logically, not literally) off of - so you could simply rename both l
and orig
to something like lst
or xs
or elems
or ....
Explore related questions
See similar questions with these tags.