;; #!/usr/bin/env gsi-script ;; Gambit & CHICKEN version (import (scheme base) (scheme write) (record-vector)) (define N-Vehicles 100000) (define (rndx) (* (random-real) 1000.)) (define (rndw) (+ 900 (random-integer 200))) (define-syntax dotimes (syntax-rules () ((_ n f ...) (do ((i 0 (+ 1 i))) ((= i n)) f ...)))) (define (main) (let* ((step 0.1) ;; sec (friction 0.01) (v (make-rv x: 0.0 speed: 0.0 accel: 0.1 mass: 1000)) (vecs (do ((i 0 (+ 1 i)) (vs (make-vector N-Vehicles))) ((= i (vector-length vs)) vs) (vector-set! vs i (rv-clone v mass: (rndw)))))) (dotimes 1000 (vector-for-each (lambda (vh) (rv-set! vh x: (+ (rv-ref vh x:) (* (rv-ref vh speed:) step))) (rv-set! vh speed: (+ (rv-ref vh speed:) (* (rv-ref vh accel:) step)))) vecs)) (print "[0].x = " (rv-ref (vector-ref vecs 0) x:)) )) ;; from .. ;; gsc -o recalc -postlude "(time (main))" -exe . record-vector.sld examples/recalc.scm ;; csc6 -O3 -prelude "(import (rename (chicken random) (pseudo-random-integer random-integer)))" -postlude "(time (main))" -strict-types -disable-interrupts -specialize examples/recalc.scm -o recalc