;;;-*- Mode:LISP; Package:BENCH-DERIV; Base:10; source->source-optimizations: t -*- ;;; We should time this with optimizations:T and optimization: UCODE ;;; to see what effect hand-microcode mapcar vs open-coding really is. ;;; From the "Dick Gabriel" Benchmark Series. ;;; Enhancements (C) Copyright 1983, Lisp Machine, Inc. ;;;BEGIN ;;; DERIV #-LISPM (DECLARE (MAPEX T)) (DEFUN DER1 (A) (LIST 'QUOTIENT (DERIV A) A)) (DEFUN DERIV (A) (COND ((ATOM A) (COND ((EQ A 'X) 1) (T 0))) ((EQ (CAR A) 'PLUS) (cons 'plus (MAPCAR #'DERIV (cdr a)))) ((EQ (CAR A) 'DIFFERENCE) (CONS 'DIFFERENCE (MAPCAR #'DERIV (CDR A)))) ((EQ (CAR A) 'TIMES) (LIST 'TIMES A (CONS 'PLUS (MAPCAR #'DER1 (CDR A))))) ((EQ (CAR A) 'QUOTIENT) (LIST 'DIFFERENCE (LIST 'QUOTIENT (DERIV (CADR A)) (CADDR A)) (LIST 'QUOTIENT (CADR A) (LIST 'TIMES (CADDR A) (CADDR A) (DERIV (CADDR A)))))) (T 'ERROR))) (DEFUN RUN () (DECLARE #-LISPM (FIXNUM I)) (DO ((I 0 (1+ I))) ((= I 1000.)) (DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5)) (DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5)) (DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5)) (DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5)) (DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5)))) ;(include "timer.lsp") (timer timit (run)) ;;;END