(defun PERMUTATE (l / x1) (cond ((null l) l) ((= (length l) 2) (list l (reverse l))) (T (repeat (length l) (foreach x (permutate (cdr l)) (setq x1 (cons (cons (car l) x) x1))) (setq l (append (cdr l) (list (car l))))) x1)))