;;; .EnTete "Le-Lisp (c) version 15.2" " " "The Le-Lisp Benchmarks (9)"
;;; .EnPied "destru.ll" "%" " "
;;; .SuperTitre "The Le-Lisp Benchmarks (9)"
;;;
;;; .Centre "*****************************************************************"
;;; .Centre " Ce fichier est en lecture seule hors du projet ALE de l'INRIA. "
;;; .Centre " Il est maintenu par ILOG SA, 2 Avenue Gallie'ni, 94250 Gentilly "
;;; .Centre " (c) Le-Lisp est une marque de'pose'e de l'INRIA "
;;; .Centre "*****************************************************************"
;;;
;;; .Centre "$Header: destru.ll,v 1.1 88/10/29 23:28:04 chaillou Exp $"
;;; (9) DESTRU -- Destructive operation benchmark.
(defun check-destru ()
(check-value '(test-destru 1) t))
(defun meter-destru ()
(perform-meter '(destructive 600 50) 'destru))
(defun test-destru (n)
(if (eq n 1)
(destructive 600 50)
(repeat n (destructive 600 50))))
(defun destructive (n m)
(let ((l (do ((i 10 (sub1 i))
(a () (cons () a)))
((eq i 0) a))))
(do ((i n (sub1 i)))
((eq i 0))
(cond ((null (car l))
(do ((l l (cdr l)))
((null l))
(or (car l)
(rplaca l (cons () ())))
(nconc (car l)
(do ((j m (sub1 j))
(a () (cons () a)))
((eq j 0) a)))))
(t
(do ((l1 l (cdr l1))
(l2 (cdr l) (cdr l2)))
((null l2))
(rplacd (do ((j (logshift (length (car l2)) -1)
(sub1 j))
(a (car l2) (cdr a)))
((eq j 0) a)
(rplaca a i))
(let ((n (logshift (length (car l1)) -1)))
(cond ((eq n 0) (rplaca l1 ())
(car l1))
(t
(do ((j n (sub1 j))
(a (car l1) (cdr a)))
((eq j 1)
(prog1 (cdr a)
(rplacd a ())))
(rplaca a i))))))))))))