reverseと同じ作用をする関数をreverseを使わずに作りたいのですが

(defun my-reverse (l)
(cond ((atom l) l)
(t (cons '()(list (my-reverse (cdr l)) (car l))))))

とやると

> (my-reverse '(a b (c d)))
(NIL (NIL (NIL NIL (C D)) B) A)

となってしまいます。
どうすればよいのでしょうか?
ちなみにLISPは本当に素人です…