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
+;; ECL doesn't allow FOR clauses after UNTIL.
+#-ecl
(defun remove-keyword (key arglist)
(loop for sublist = arglist then rest until (null sublist)
for (elt arg . rest) = sublist