23 lines
575 B
Common Lisp
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)))
|