Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun flatten-1 (l)
- (cond
- ((null l) nil)
- ((atom l) (list l))
- (t (loop for a in l appending (flatten-1 a)))))
- (defun flatten (x &optional y)
- (cond
- ((null x)
- (cond
- ((null y) nil)
- ((listp (car y))
- (flatten (car y) (cdr y)))
- (t (cons (car y) (flatten (cdr y))))))
- ((listp (car x))
- (flatten (car x) (if y (list (cdr x) y) (cdr x))))
- (t (cons (car x) (flatten (cdr x) y)))))
- (defun flatten-2 (l)
- (when l
- (if (atom l)
- (list l)
- (mapcan #'flatten-2 l))))
- (let ((test (get-internal-real-time)))
- (dotimes (i 1e6)
- (flatten '(1 2 (3 4) (5 (6 (7 8) 9 a (10))) b (10.5 (1.6) (1.7)) 11)))
- (print (- (get-internal-real-time) test))
- (setf test (get-internal-real-time))
- (dotimes (i 1e6)
- (flatten-2 '(1 2 (3 4) (5 (6 (7 8) 9 a (10))) b (10.5 (1.6) (1.7)) 11)))
- (print (- (get-internal-real-time) test))
- (setf test (get-internal-real-time))
- (dotimes (i 1e6)
- (flatten-1 '(1 2 (3 4) (5 (6 (7 8) 9 a (10))) b (10.5 (1.6) (1.7)) 11)))
- (print (- (get-internal-real-time) test)))
- ;; results
- ;; 886
- ;; 2868
- ;; 1828
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement