X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=lists.lisp;h=a2ae23ff6c34d4c6ee20d0e2d7c1f426542d2018;hb=505719b3b81c4d595aa46ca53fd3474f2c705733;hp=5cd193cefe96910174ef1c9a9a5039c0b1c9b7b5;hpb=7397fb7597f3fe9c658e6fb1ad67c805029dd073;p=kmrcl.git diff --git a/lists.lisp b/lists.lisp index 5cd193c..a2ae23f 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 (consp item) + (map nil #'scan item) + (push item result)))) + (scan tree)) + (nreverse result))) ;;; Keyword functions