;; #!/usr/bin/env gsi-script ;; Gambit & CHICKEN version (import (scheme base) (scheme write) (record-vector)) (define N-Vehicles 100000) (define (rndx) (* (random:exp) 1000.)) (define (rndw) (+ 900 (random 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)) (format #t "[0].x = ~a" (rv-ref (vector-ref vecs 0) #:x)) )) ;; from .. ;; guile -L . --r7rs ;; > (load "examples/recalc-guile.scm") ;; > ,time (main)