(define (msecs v) (quotient (* v 1000) internal-time-units-per-second)) (define (repeat* n thunk) (let loop ((n n)) (if (= n 0) (values) (begin (thunk) (repeat* (- n 1) thunk))))) (define-syntax repeat (syntax-rules () ((_ n expr) (repeat* n (lambda () expr))))) (define (%time thunk) (let ((start (times))) (let ((v (thunk))) (let ((end (times))) (msecs (- (tms:utime end) (tms:utime start))))))) (define (time* n thunk) (display (- (%time (lambda () (repeat* n thunk))) (%time (lambda () (repeat* n (lambda () #f)))))) (newline)) (define-syntax time (syntax-rules () ((_ n expr) (time* n (lambda () expr)))))