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)