Files
2026-02-14 08:15:03 +01:00

23 lines
575 B
Common Lisp

;; With mapcan
(defun my-flatten (lst)
(mapcan #'(lambda (item)
(if (listp item)
(my-flatten item)
(list item))
) lst))
;; With reduce
(defun my-flatten (lst)
(reduce #'(lambda (accumulator item)
(if (listp item)
(append accumulator (my-flatten item))
(append accumulator (list item)))
) lst :initial-value '()))
;; C-c C-k
(assert (equal (my-flatten '()) '()))
(assert (equal (my-flatten '(a b c)) '(A B C)))
(assert (equal (my-flatten '((a b) c d)) '(A B C D)))
(assert (equal (my-flatten '(a (b (c d) e))) '(A B C D E)))