Advertisement
Guest User

Comparison of list flattening algorithms

a guest
May 8th, 2012
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.11 KB | None | 0 0
  1. (defun flatten-1 (l)
  2.   (cond
  3.     ((null l) nil)
  4.     ((atom l) (list l))
  5.     (t (loop for a in l appending (flatten-1 a)))))
  6.  
  7. (defun flatten (x &optional y)
  8.   (cond
  9.     ((null x)
  10.      (cond
  11.        ((null y) nil)
  12.        ((listp (car y))
  13.         (flatten (car y) (cdr y)))
  14.        (t (cons (car y) (flatten (cdr y))))))
  15.     ((listp (car x))
  16.      (flatten (car x) (if y (list (cdr x) y) (cdr x))))
  17.     (t (cons (car x) (flatten (cdr x) y)))))
  18.  
  19. (defun flatten-2 (l)
  20.   (when l
  21.     (if (atom l)
  22.     (list l)
  23.     (mapcan #'flatten-2 l))))
  24.  
  25. (let ((test (get-internal-real-time)))
  26.   (dotimes (i 1e6)
  27.     (flatten '(1 2 (3 4) (5 (6 (7 8) 9 a (10))) b (10.5 (1.6) (1.7)) 11)))
  28.   (print (- (get-internal-real-time) test))
  29.   (setf test (get-internal-real-time))
  30.   (dotimes (i 1e6)
  31.     (flatten-2 '(1 2 (3 4) (5 (6 (7 8) 9 a (10))) b (10.5 (1.6) (1.7)) 11)))
  32.   (print (- (get-internal-real-time) test))
  33.   (setf test (get-internal-real-time))
  34.   (dotimes (i 1e6)
  35.     (flatten-1 '(1 2 (3 4) (5 (6 (7 8) 9 a (10))) b (10.5 (1.6) (1.7)) 11)))
  36.   (print (- (get-internal-real-time) test)))
  37. ;; results
  38. ;; 886
  39. ;; 2868
  40. ;; 1828
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement