Lista reversa na raquete em O (n)

Eu preciso escrever uma função recursiva no esquema que pega uma lista de átomos e a reverte em tempo linear. Eu só posso usar define, lambda, contras, carro, cdr, cond, let e nulo? . Aqui está o que eu tenho até agora:

(define reverse
  (lambda (lat)
    (cond
      ((null? lat) lat)
      (else (cons (reverse (cdr lat)) (cons (car lat) '()))))))

Então, quando eu chamo a função:

(reverse '(a b c d))

Eu recebo a seguinte saída:

'(() (((() 4) 3) 2) 1)

qualquer ajuda seria muito bem vinda.

questionAnswers(1)

yourAnswerToTheQuestion