(defun traverse-largeur (l) (TL (list l) '()) ) (defun TL (file result) (if file (TL (append (rest file) (if (atom (first file)) '() (first file))) (append result (list (first file))) ) result )) ;; (traverse-largeur '()) -> (NIL) ;; (traverse-largeur '(1 2 3)) -> ((1 2 3) 1 2 3) ;; (traverse-largeur '(1 (2 3) 4)) -> ((1 (2 3) 4) 1 (2 3) 4 2 3) (defun subst0 (dans avant apres) (cond ((equal dans avant) apres) ((atom dans) dans) (t (cons (subst0 (first dans) avant apres) (subst0 (rest dans) avant apres)) ) ) ) ;; (time (subst0 '(1 2 3 4 2) 2 'a)) ;; (time (subst0 '(1 (2 3 (6 7 2) 4) 2) 2 'a)) ;; (time (subst0 '(1 (3 5 (6 () (7 8)) 9) 2) 2 'a)) -> 96 cons (defun subst1 (dans avant apres) (flet ((ecocons (x y) (if (and (eq x (first dans)) (eq y (rest dans))) dans (cons x y)) ) ) (cond ((equal dans avant) apres) ((atom dans) dans) (t (ecocons (subst1 (first dans) avant apres) (subst1 (rest dans) avant apres)) ) ) ) ) ;; (time (subst1 '(1 2 3 4 2) 2 'a)) ;; (time (subst1 '(1 (2 3 (6 7 2) 4) 2) 2 'a)) ;; (time (subst1 '(1 (3 5 (6 () (7 8)) 9) 2) 2 'a)) -> 24 cons (defun subst3 (dans avant apres) (cond ((equal dans avant) apres) ((atom dans) dans) (t (let ((s1 (subst3 (first dans) avant apres)) (s2 (subst3 (rest dans) avant apres)) ) (if (and (eq (first dans) s1) (eq (rest dans) s2)) dans (cons s1 s2)))) ) ) ;; (time (subst3 '(1 2 3 4 2) 2 'a)) ;; (time (subst3 '(1 (2 3 (6 7 2) 4) 2) 2 'a)) ;; (time (subst3 '(1 (3 5 (6 () (7 8)) 9) 2) 2 'a)) -> 24 cons