;; #!/usr/bin/env gosh ;; Gauche (import (scheme base) (scheme write) (srfi 27) (gauche base) (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 args) (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 "[0].x = ~a" (rv-ref (vector-ref vecs 0) :x)) )) ;; from .. ;; gosh -A . ;; > (load "examples/recalc-gauche.scm") ;; > ,time (main)