From 94c161e4a288d874d8d763b768312e1004a888ec Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Mon, 22 Mar 2010 13:35:00 -0600 Subject: [PATCH] optimize flatten function --- lists.lisp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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 -- 2.34.1