Skip to content

Instantly share code, notes, and snippets.

@johnciacia
Created December 15, 2010 23:47
Show Gist options
  • Save johnciacia/742797 to your computer and use it in GitHub Desktop.
Save johnciacia/742797 to your computer and use it in GitHub Desktop.
Generate the permutations of a given list
* (load "permute.lsp")
; Loading #p"/home/john/permute.lsp".
T
* (p (list 'a 'b 'c 'd 'e))
((A B C D E) (A B C E D) (A B D C E) (A B D E C) (A B E C D) (A B E D C)
(A C B D E) (A C B E D) (A C D B E) (A C D E B) (A C E B D) (A C E D B)
(A D B C E) (A D B E C) (A D C B E) (A D C E B) (A D E B C) (A D E C B)
(A E B C D) (A E B D C) (A E C B D) (A E C D B) (A E D B C) (A E D C B)
(B A C D E) (B A C E D) (B A D C E) (B A D E C) (B A E C D) (B A E D C)
(B C A D E) (B C A E D) (B C D A E) (B C D E A) (B C E A D) (B C E D A)
(B D A C E) (B D A E C) (B D C A E) (B D C E A) (B D E A C) (B D E C A)
(B E A C D) (B E A D C) (B E C A D) (B E C D A) (B E D A C) (B E D C A)
(C A B D E) (C A B E D) (C A D B E) (C A D E B) (C A E B D) (C A E D B)
(C B A D E) (C B A E D) (C B D A E) (C B D E A) (C B E A D) (C B E D A)
(C D A B E) (C D A E B) (C D B A E) (C D B E A) (C D E A B) (C D E B A)
(C E A B D) (C E A D B) (C E B A D) (C E B D A) (C E D A B) (C E D B A)
(D A B C E) (D A B E C) (D A C B E) (D A C E B) (D A E B C) (D A E C B)
(D B A C E) (D B A E C) (D B C A E) (D B C E A) (D B E A C) (D B E C A)
(D C A B E) (D C A E B) (D C B A E) (D C B E A) (D C E A B) (D C E B A)
(D E A B C) (D E A C B) (D E B A C) (D E B C A) (D E C A B) (D E C B A)
(E A B C D) (E A B D C) (E A C B D) (E A C D B) (E A D B C) (E A D C B)
(E B A C D) (E B A D C) (E B C A D) (E B C D A) (E B D A C) (E B D C A)
(E C A B D) (E C A D B) (E C B A D) (E C B D A) (E C D A B) (E C D B A)
(E D A B C) (E D A C B) (E D B A C) (E D B C A) (E D C A B) (E D C B A))
(defun p (l)
(if (null l) '(())
(mapcan #'(lambda (x)
(mapcar #'(lambda (y) (cons x y))
(p (remove x l :count 1)))) l)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment