home *** CD-ROM | disk | FTP | other *** search
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; File: destruct.cl
- ; Description: DESTRUCTIVE benchmark from Gabriel tests
- ; Author: Bob Shaw, HPLabs/ATC
- ; Created: 8-Apr-85
- ; Modified: 10-Apr-85 14:54:12 (Bob Shaw)
- ; Language: Common Lisp
- ; Package: User
- ; Status: Public Domain
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ;;; DESTRU -- Destructive operation benchmark
-
- (defun destructive (n m)
- (declare (fixnum n m))
- (let ((l (do ((i 10 (1- i))
- (a nil (push nil a)))
- ((= i 0) a)
- (declare (fixnum i)))))
- (do ((i n (1- i)))
- ((= i 0))
- (declare (fixnum i))
- (cond ((null (car l))
- (do ((l l (cdr l)))
- ((null l))
- (or (car l)
- (rplaca l (cons nil nil)))
- (nconc (car l)
- (do ((j m (1- j))
- (a nil (push nil a)))
- ((= j 0) a)))))
- (t
- (do ((l1 l (cdr l1))
- (l2 (cdr l) (cdr l2)))
- ((null l2))
- (rplacd (do ((j (floor (length (car l2)) 2) (1- j))
- (a (car l2) (cdr a)))
- ((zerop j) a)
- (declare (fixnum j))
- (rplaca a i))
- (let ((n (floor (length (car l1)) 2)))
- (declare (fixnum n))
- (cond ((= n 0) (rplaca l1 nil)
- (car l1))
- (t
- (do ((j n (1- j))
- (a (car l1) (cdr a)))
- ((= j 1)
- (prog1 (cdr a)
- (rplacd a nil)))
- (declare (fixnum j))
- (rplaca a i))))))))))))
-
- ;;; call: (destructive 600 50)
-
- (run-benchmark "Destructive" '(destructive 600 50))
-