X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=lists.lisp;fp=lists.lisp;h=eaa3f9d372aa601d079d6f24ead4798bc17ea467;hp=5cd193cefe96910174ef1c9a9a5039c0b1c9b7b5;hb=94c161e4a288d874d8d763b768312e1004a888ec;hpb=91bc2275c7983862e8c95e5d3c915f711c1e7909 diff --git a/lists.lisp b/lists.lisp index 5cd193c..eaa3f9d 100644 --- a/lists.lisp +++ b/lists.lisp @@ -73,11 +73,14 @@ it nil))))) -(defun flatten (lis) - (cond ((atom lis) lis) - ((listp (car lis)) - (append (flatten (car lis)) (flatten (cdr lis)))) - (t (append (list (car lis)) (flatten (cdr lis)))))) +(defun flatten (tree) + (let ((result '())) + (labels ((scan (item) + (if (listp item) + (map nil #'scan item) + (push item result)))) + (scan tree)) + (nreverse result))) ;;; Keyword functions