Jump to content

Permutations: Difference between revisions

Line 655:
 
(print (permute '(A B Z)))</lang>output<lang>((A B Z) (A Z B) (B A Z) (B Z A) (Z A B) (Z B A))</lang>
 
Lexicographic next permutation:
<lang lisp>(defun next-perm (list cmp)
;; coerce is debatable
(let ((ll (coerce list 'vector)) i (len (1- (length list))))
(loop for i from (1- len) downto 0 do
(when (funcall cmp (elt list i) (elt list (1+ i)))
(loop for k from len downto i do
(when (funcall cmp (elt list i) (elt list k))
(rotatef (elt ll i) (elt ll k))
(setf k (1+ len))
(loop while (< (incf i) (decf k)) do
(rotatef (elt ll i) (elt ll k)))
(return-from next-perm ll)))))))
 
;;; text code
(let ((a "ABCD") (cnt 0))
(loop while a do
(write-line a)
(setf a (next-perm a #'char<))))<lang>
 
=={{header|D}}==
<lang d>import std.stdio: writeln;
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.