August 19, 2024

P07 - Flatten a nested list structure

Transform a list, possibly holding lists as elements into a `flat' list by replacing each list with its elements (recursively).

Example:* (my-flatten '(a (b (c d) e)))(A B C D E)

Hint: Use the predefined functions list and append.

lisp

;;;  Recebe uma lista e retorna uma lista que, no lugar dos     ;;;
;;;  elementos que são sub-listas, possui os elementos dessas   ;;;
;;;  sub-listas, recursivamente.                                ;;;

(defun flatten (orig-list)
    (if (eql orig-list nil)
        nil
        (let ((elem (car orig-list)) (resto-list (cdr orig-list)))
            (if (listp elem)
                (append (flatten elem) (flatten resto-list))
                (append (cons elem nil) (flatten resto-list))))))
Be first to comment
Leave a reply