; your code goes here (defun perm (l) (when (null l) (return-from perm nil)) (when (= (length l) 1) (return-from perm (list l))) (mapcan (lambda (e) (mapcar (lambda (p) (append (list e) p)) (perm (remove e l)))) l)) (dolist (p (perm '(1 2 3 4 5))) (format t "~A~%" p))
Standard input is empty
(1 2 3 4 5) (1 2 3 5 4) (1 2 4 3 5) (1 2 4 5 3) (1 2 5 3 4) (1 2 5 4 3) (1 3 2 4 5) (1 3 2 5 4) (1 3 4 2 5) (1 3 4 5 2) (1 3 5 2 4) (1 3 5 4 2) (1 4 2 3 5) (1 4 2 5 3) (1 4 3 2 5) (1 4 3 5 2) (1 4 5 2 3) (1 4 5 3 2) (1 5 2 3 4) (1 5 2 4 3) (1 5 3 2 4) (1 5 3 4 2) (1 5 4 2 3) (1 5 4 3 2) (2 1 3 4 5) (2 1 3 5 4) (2 1 4 3 5) (2 1 4 5 3) (2 1 5 3 4) (2 1 5 4 3) (2 3 1 4 5) (2 3 1 5 4) (2 3 4 1 5) (2 3 4 5 1) (2 3 5 1 4) (2 3 5 4 1) (2 4 1 3 5) (2 4 1 5 3) (2 4 3 1 5) (2 4 3 5 1) (2 4 5 1 3) (2 4 5 3 1) (2 5 1 3 4) (2 5 1 4 3) (2 5 3 1 4) (2 5 3 4 1) (2 5 4 1 3) (2 5 4 3 1) (3 1 2 4 5) (3 1 2 5 4) (3 1 4 2 5) (3 1 4 5 2) (3 1 5 2 4) (3 1 5 4 2) (3 2 1 4 5) (3 2 1 5 4) (3 2 4 1 5) (3 2 4 5 1) (3 2 5 1 4) (3 2 5 4 1) (3 4 1 2 5) (3 4 1 5 2) (3 4 2 1 5) (3 4 2 5 1) (3 4 5 1 2) (3 4 5 2 1) (3 5 1 2 4) (3 5 1 4 2) (3 5 2 1 4) (3 5 2 4 1) (3 5 4 1 2) (3 5 4 2 1) (4 1 2 3 5) (4 1 2 5 3) (4 1 3 2 5) (4 1 3 5 2) (4 1 5 2 3) (4 1 5 3 2) (4 2 1 3 5) (4 2 1 5 3) (4 2 3 1 5) (4 2 3 5 1) (4 2 5 1 3) (4 2 5 3 1) (4 3 1 2 5) (4 3 1 5 2) (4 3 2 1 5) (4 3 2 5 1) (4 3 5 1 2) (4 3 5 2 1) (4 5 1 2 3) (4 5 1 3 2) (4 5 2 1 3) (4 5 2 3 1) (4 5 3 1 2) (4 5 3 2 1) (5 1 2 3 4) (5 1 2 4 3) (5 1 3 2 4) (5 1 3 4 2) (5 1 4 2 3) (5 1 4 3 2) (5 2 1 3 4) (5 2 1 4 3) (5 2 3 1 4) (5 2 3 4 1) (5 2 4 1 3) (5 2 4 3 1) (5 3 1 2 4) (5 3 1 4 2) (5 3 2 1 4) (5 3 2 4 1) (5 3 4 1 2) (5 3 4 2 1) (5 4 1 2 3) (5 4 1 3 2) (5 4 2 1 3) (5 4 2 3 1) (5 4 3 1 2) (5 4 3 2 1)