Вот простая версия, использующая `vector's:
#lang racket
(define N 3000000)
(define avector
(for/vector #:length N ([i (in-range N)]) (random)))
(define (sum-vec v)
(for/fold ([i 0.0]) ([e (in-vector v)]) (+ e i)))
(time (sum-vec avector))
Это работает примерно на 250 мс на моей машине.
Если мы перейдем на использование flvector
:
#lang racket
(require racket/flonum)
(define N 3000000)
(define avector
(for/flvector #:length N ([i (in-range N)]) (random)))
(define (sum-vec v)
(for/fold ([i 0.0]) ([e (in-flvector v)]) (+ e i)))
(time (sum-vec avector))
Затем он запускается примерно через 60 мс.
Если мы изменим его на использование Typed Racket:
#lang typed/racket
(require racket/flonum)
(define N 3000000)
(define avector
(for/flvector #:length N ([i (in-range N)]) (random)))
(: sum-vec : FlVector -> Float)
(define (sum-vec v)
(for/fold ([i 0.0]) ([e (in-flvector v)]) (+ e i)))
(time (sum-vec avector))
Теперь он работает примерно за 20 мс.