;;; 
;;; c:\program files\acl62\utility.cl 
;;; 
(load "c:\\program files\\acl62\\my-test.cl") 
(defun search-s1-in-s2 (s1 s2) 
  (let* ((n1 (length s1)) 
      (n2 (length s2)) 
      (lst (do ((i 0 (1+ i)) 
            (j n1 (1+ j)) 
            (w nil)) 
           ((= i n2) 
            (cond ((null w) nil) 
                (t (push n2 w) 
                  (cond ((not (member 0 w)) 
                       (append w '(0))) 
                      (t w))))) 
        (cond ((and (equal s1 (subseq s2 i j)) 
                (cond ((null w) t) 
                     (t (>= i (car w))))) 
             (push i w) 
             (push (+ i n1) w)))))) 
  ;;; 
  (do ((l lst (cdr l)) 
     (w)) 
     ((null (cdr l)) w) 
   (cond ((not (= (car l) (cadr l))) 
        (push (list (cadr l) (car l)) w)))))) 
(defun divide-s1-with-s2 (s1 s2) 
  (let ((lst (search-s1-in-s2 s2 s1))) 
    (do ((l lst (cdr l)) 
       (w)) 
      ((null l) (reverse w)) 
     (push (subseq s1 (caar l) (cadar l)) w)))) 
(defun implode-aux (l) 
  (cond ((null l) "") 
      (t (concatenate 'string (car l) (implode-aux (cdr l)))))) 
(defun implode (l) (intern (implode-aux l))) 
;;; 
;;; (replace-s1-with-s2-in-s "a" "x" "abcabc") ===> "xbcxbc" 
;;; 
(defun replace-s1-with-s2-in-s (s1 s2 s) 
  (let ((lst (divide-s1-with-s2 s s1))) 
    (do ((l lst (cdr l)) 
       (w)) 
       ((null l) (implode-aux (reverse w))) 
     (if (equal (car l) s1) 
       (push s2 w) 
      (push (car l) w))))) 
(defun display-a-list (l) 
  (do ((lst l (cdr lst)) 
     (i 1 (1+ i))) 
     ((null lst)) 
    (format t "~% ~a. ~a" i (car lst)))) 
(defun read-sentence () 
  (let ((input (make-string-input-stream (read-line)))) 
   (unwind-protect 
     (progn 
       (do ((word (read input nil) (read input nil)) 
          (sentence nil)) 
         ((not word) (return (reverse sentence))) 
        (push word sentence))) 
    (close input)))) 
(defun diskout-a-list (file-name lst) 
  (let ((stream (open file-name :direction :output))) 
   (print lst stream) 
   (close stream))) 
(defun diskin-a-list (file-name) 
  (with-open-file (stream file-name :direction :input) 
    (do ((data (read stream nil 'eof) (read stream nil 'eof)) 
       (w nil)) 
      ((eq data 'eof) (reverse w)) 
     (push data w)))) 
(defun cut-head-of-list (l n) 
  (cond ((<= (length l) n) l) 
      ((= (length l) (1+ n)) 
       (rest l)) 
      (t (cut-head-of-list (rest l) n)))) 
(defun generate-a-number-n1-n2 (n1 n2) 
  (prog (num) 
    loop 
    (setf num (random (* 6 n2))) 
    (if (and (>= num n1) (<= num n2)) 
      (return num) 
     (go loop)))) 
(defun remove-first-list-from-second-list (f s) 
  (cond ((null f) s) 
      ((member (first f) s :test #'equal) 
       (remove (first f) 
             (remove-first-list-from-second-list (rest f)
s) 
             :test #'equal)) 
      (t 
       (remove-first-list-from-second-list (rest f) s)))) 
(defun same-set-p (a b) 
  (and (null (remove-first-list-from-second-list a b)) 
     (null (remove-first-list-from-second-list b a)))) 
(defun sub-set-p (a b) 
  (null (remove-first-list-from-second-list b a))) 
(defun rotate-list (l &key direction (distance 2)) 
  (if (eq direction 'left) 
    (rotate-list-left l distance) 
   (rotate-list-right l distance))) 
(defun rotate-list-right (l n) 
  (if (zerop n) 
    l 
   (rotate-list-right (append (last l) (butlast l)) (1- n)))) 
(defun rotate-list-left (l n) 
  (if (zerop n) 
    l 
   (rotate-list-left (append (rest l) (list (first l))) (1- n)))) 
(defun get-position-of-an-element (e l) 
  (do ((lst l (cdr lst)) 
     (i 1 (1+ i))) 
    ((null lst) nil) 
   (cond ((equal e (car lst)) 
       (return i))))) 
(defun my-nth (n l) (nth (1- n) l)) 
(defun cut-list-at-length (n l) 
  (if (<= (length l) n) 
    l 
   (do ((lst l (cdr lst)) 
      (i 0 (1+ i)) 
      (w)) 
      ((= i n) (reverse w)) 
    (push (car lst) w)))) 
(setf *seed* 0) 
;(defun my-rand () 
;   (prog () 
;     (setf *seed* (mod (+ (* 25173 *seed*) 13849) 65536)) 
;     (return *seed*))) 
(defun my-rand () 
   (prog () 
     (setf *seed* (mod (+ (* 7 *seed*) 4079) 268435456)) 
     (return *seed*))) 
(defun my-random (n) (mod (my-rand) n)) 
(defun squash (s) 
   (cond ((null s) nil) 
       ((atom s) (list s)) 
       (t (append (squash (car s)) (squash (cdr s)))))) 
(defun get-numbers-from-a-list (l) 
   (do ((lst l (cdr lst)) 
      (w)) 
      ((null lst) (reserve w)) 
    (if (numberp (car lst)) (push (car lst) w)))) 
(defun remove-duplicate (l) 
   (cond ((null l) nil) 
       ((member (car l) (cdr l) :test #'equal) 
        (cons (car l) (remove (car l) 
                      (remove-duplicate (cdr l))
:test #'equal))) 
       (t 
        (cons (car l) (remove-duplicate (cdr l)))))) 
(defun my-load (filename) 
   (let ((stream (open filename :direction :input))) 
     (do ((form nil (read stream nil stream))) 
        ((eq form stream) (close stream)) 
      (print (eval form))))) 
(defun make-frame-from-list (l) (putprop (car l) l 'frame)) 
(defun display-frame (frame) 
  (let ((lst (fget-frame frame))) 
   (format t "~%On the frame ~a~%" (car lst)) 
   (mapcan #'(lambda (e) 
           (format t "~% ***** ~a *****~% ~a" (car e) (cdadr e))) 
     (rest lst))))