(defun random-permutation (the-list) (cond ((null the-list) () ) (T (setf temp (nth (random (length the-list)) the-list)) (cons temp (random-permutation (take-from temp the-list))) ) ) ) Demo: [24]> (random-permutation ()) 1. Trace: (RANDOM-PERMUTATION 'NIL) 1. Trace: RANDOM-PERMUTATION ==> NIL NIL [35]> (random-permutation '(1 2 3 4)) 1. Trace: (RANDOM-PERMUTATION '(1 2 3 4)) 2. Trace: (RANDOM-PERMUTATION '(1 2 3)) 3. Trace: (RANDOM-PERMUTATION '(1 2)) 4. Trace: (RANDOM-PERMUTATION '(2)) 5. Trace: (RANDOM-PERMUTATION 'NIL) 5. Trace: RANDOM-PERMUTATION ==> NIL 4. Trace: RANDOM-PERMUTATION ==> (2) 3. Trace: RANDOM-PERMUTATION ==> (1 2) 2. Trace: RANDOM-PERMUTATION ==> (3 1 2) 1. Trace: RANDOM-PERMUTATION ==> (4 3 1 2) (4 3 1 2) [39]> (random-permutation '(2 22 222)) 1. Trace: (RANDOM-PERMUTATION '(2 22 222)) 2. Trace: (RANDOM-PERMUTATION '(2 222)) 3. Trace: (RANDOM-PERMUTATION '(222)) 4. Trace: (RANDOM-PERMUTATION 'NIL) 4. Trace: RANDOM-PERMUTATION ==> NIL 3. Trace: RANDOM-PERMUTATION ==> (222) 2. Trace: RANDOM-PERMUTATION ==> (2 222) 1. Trace: RANDOM-PERMUTATION ==> (22 2 222) (22 2 222) [40]> (random-permutation '(a b c d)) 1. Trace: (RANDOM-PERMUTATION '(A B C D)) 2. Trace: (RANDOM-PERMUTATION '(A B D)) 3. Trace: (RANDOM-PERMUTATION '(A D)) 4. Trace: (RANDOM-PERMUTATION '(D)) 5. Trace: (RANDOM-PERMUTATION 'NIL) 5. Trace: RANDOM-PERMUTATION ==> NIL 4. Trace: RANDOM-PERMUTATION ==> (D) 3. Trace: RANDOM-PERMUTATION ==> (A D) 2. Trace: RANDOM-PERMUTATION ==> (B A D) 1. Trace: RANDOM-PERMUTATION ==> (C B A D) (C B A D) [41]> (random-permutation '(1 2 sdf 335 t3)) 1. Trace: (RANDOM-PERMUTATION '(1 2 SDF 335 T3)) 2. Trace: (RANDOM-PERMUTATION '(1 2 335 T3)) 3. Trace: (RANDOM-PERMUTATION '(1 2 335)) 4. Trace: (RANDOM-PERMUTATION '(1 2)) 5. Trace: (RANDOM-PERMUTATION '(1)) 6. Trace: (RANDOM-PERMUTATION 'NIL) 6. Trace: RANDOM-PERMUTATION ==> NIL 5. Trace: RANDOM-PERMUTATION ==> (1) 4. Trace: RANDOM-PERMUTATION ==> (2 1) 3. Trace: RANDOM-PERMUTATION ==> (335 2 1) 2. Trace: RANDOM-PERMUTATION ==> (T3 335 2 1) 1. Trace: RANDOM-PERMUTATION ==> (SDF T3 335 2 1) (SDF T3 335 2 1)