Achatar uma lista multidimensional em Lisp

Recentemente, esbarrei em meu curso de Programação de IA (no qual usamos Lisp) ao trabalhar com listas multidimensionais e tentar encontrar os valores mínimo e máximo. O Lisp aparentemente não tem nenhum tipo de função de nivelamento embutida para pegar uma lista multidimensional e retornar uma lista unidimensional. Depois de coçar a cabeça um pouco, chegamos à seguinte função simples de achatar:

(defun flatten (l)
(cond ((null l) nil)
((atom l) (list l))
(t (loop for a in l appending (flatten a))))
)

Você usa a função assim:

(flatten '(1 3 5 7 (9 3 4) (2)))

Isso retornaria:

(1 3 5 7 9 3 4 2)