Common Lisp - wyrównanie listy, która może zawierać symbole

To jest # 7 z99 problemów Lisp: przekształć listę, prawdopodobnie przechowując listy jako elementy na liście „płaskiej”, zastępując każdą listę jej elementami (rekurencyjnie). Próbowałem kilku rozwiązań, np. Z #2680864 lubstąd. Wszystkie działają, ale napotykam problem, jeśli spłaszczam listę zawierającą cytowany element. Na przykład.:

> '(a 'b c)
(A 'B C)

> '(a (quote b) c)
(A 'B C)

> (flatten '(a 'b c))
(A QUOTE B C)

W tym drugim przypadku chciałbym uzyskać:

(A 'B C)

Wygląda na to, że wewnętrzna reprezentacja „przeszkadza w tym zadaniu! SBCL, CLISP, ECL, ... wszyscy zachowują się w ten sam sposób.

questionAnswers(1)

yourAnswerToTheQuestion