;;;
;;; c:\\program files\\acl62\\music59.cl
;;;
(load "c:\\program files\\acl62\\music58.cl") 

(defun rotate-list-from-elment-forward (element l)
    (rotate-list-left l (- (get-position-of-an-element element l) 1))) 

(defun rotate-list-from-elment-forward-and-cut (element l) 
   (let ((lst (rotate-list-from-elment-forward element l))) 
     (cut-list-at-length (+ (random (length lst)) 1) lst))) 

(defun rotate-list-from-elment-forward-and-cut-2 (element l)
  (let ((lst (rotate-list-from-elment-forward element l)))
     (cut-list-at-length (+ (random 4) 1) lst))) 

(defun rotate-list-from-elment-backward (element l) 
    (rotate-list-left (reverse l) 
         (- (get-position-of-an-element element (reverse l)) 1))) 

(defun rotate-list-from-elment-backward-and-cut (element l) 
   (let ((lst (rotate-list-from-elment-backward element l))) 
      (cut-list-at-length (+ (random (length lst)) 1) lst))) 

(defun rotate-list-from-elment-backward-and-cut-2 (element l) 
  (let ((lst (rotate-list-from-elment-backward element l)))
     (cut-list-at-length (+ (random 4) 1) lst))) 

(defun rotate-list-from-elment-and-cut (element l)
    (case (random 2)
       (0 (rotate-list-from-elment-forward-and-cut element l))
       (1 (rotate-list-from-elment-backward-and-cut element l))))

 (defun rotate-list-from-elment-and-cut-2 (element l)
    (case (random 2)
       (0 (rotate-list-from-elment-forward-and-cut-2 element l))
       (1 (rotate-list-from-elment-backward-and-cut-2 element l)))) 

(defun rotate-list-from-elment-forward-at-random (l) 
   (rotate-list-from-elment-forward (nth (random (length l)) l) l)) 

(defun rotate-list-from-elment-backward-at-random (l) 
   (rotate-list-from-elment-backward (nth (random (length l)) l) l)) 

(defun rotate-list-from-elment-forward-at-random-and-cut (l) 
  (let ((lst (rotate-list-from-elment-forward-at-random l))) 
     (cut-list-at-length (+ (random (length lst)) 1) lst))) 

(defun rotate-list-from-elment-forward-at-random-and-cut-2 (l) 
  (let ((lst (rotate-list-from-elment-forward-at-random l))) 
     (cut-list-at-length (+ (random 4) 1) lst))) 

(defun rotate-list-from-elment-backward-at-random-and-cut (l) 
   (let ((lst (rotate-list-from-elment-backward-at-random l))) 
      (cut-list-at-length (+ (random (length lst)) 1) lst))) 

(defun rotate-list-from-elment-backward-at-random-and-cut-2 (l) 
   (let ((lst (rotate-list-from-elment-backward-at-random l))) 
      (cut-list-at-length (+ (random 4) 1) lst))) 

(defun rotate-list-from-elment-at-random-and-cut (l) 
   (case (random 2) 
     (0 (rotate-list-from-elment-forward-at-random-and-cut l)) 
     (1 (rotate-list-from-elment-backward-at-random-and-cut l)))) 

(defun rotate-list-from-elment-at-random-and-cut-2 (l) 
  (case (random 2) 
     (0 (rotate-list-from-elment-forward-at-random-and-cut-2 l)) 
     (1 (rotate-list-from-elment-backward-at-random-and-cut-2 l)))) 

(defun connect-lists (l) 
  (let* ((ll (rotate-list-from-elment-at-random-and-cut l)) 
         (l1 (rotate-list-from-elment-and-cut (car (last ll)) l)) 
         (l2 (rotate-list-from-elment-and-cut (car (last l1)) l)) 
         (l3 (rotate-list-from-elment-and-cut (car (last l2)) l)) 
         (l4 (rotate-list-from-elment-and-cut (car (last l3)) l)) 
         (l5 (rotate-list-from-elment-and-cut (car (last l4)) l)) 
         (l6 (rotate-list-from-elment-and-cut (car (last l5)) l)) 
         (l7 (rotate-list-from-elment-and-cut (car (last l6)) l)) 
         (l8 (rotate-list-from-elment-and-cut (car (last l7)) l)) 
         (l9 (rotate-list-from-elment-and-cut (car (last l8)) l))) 
     (append (butlast ll) (butlast l1) (butlast l2) (butlast l3) 
             (butlast l4) (butlast l5) (butlast l6) (butlast l7) 
             (butlast l8) (butlast l9)))) 

(defun connect-lists-2 (l) 
  (let* ((ll (rotate-list-from-elment-at-random-and-cut-2 l)) 
         (l1 (rotate-list-from-elment-and-cut-2 (car (last ll)) l)) 
         (l2 (rotate-list-from-elment-and-cut-2 (car (last l1)) l)) 
         (l3 (rotate-list-from-elment-and-cut-2 (car (last l2)) l)) 
         (l4 (rotate-list-from-elment-and-cut-2 (car (last l3)) l)) 
         (l5 (rotate-list-from-elment-and-cut-2 (car (last l4)) l)) 
         (l6 (rotate-list-from-elment-and-cut-2 (car (last l5)) l)) 
         (l7 (rotate-list-from-elment-and-cut-2 (car (last l6)) l)) 
         (l8 (rotate-list-from-elment-and-cut-2 (car (last l7)) l)) 
         (l9 (rotate-list-from-elment-and-cut-2 (car (last l8)) l))) 
     (append (butlast ll) (butlast l1) (butlast l2) (butlast l3) 
             (butlast l4) (butlast l5) (butlast l6) (butlast l7) 
             (butlast l8) (butlast l9)))) 

(defun get-elements-in-a-list-at-random (l) 
   (do ((i 1 (1+ i)) 
        (w)) 
       ((> i 20) (cut-list-at-length (+ (random 20) 1) w)) 
     (push (nth (random (length l)) l) w))) 

(defun get-elements-in-a-list-at-random-2 (l) 
   (do ((i 1 (1+ i)) 
        (w)) 
       ((> i 10) (cut-list-at-length (+ (random 10) 1) w)) 
     (push (nth (random (length l)) l) w)))