這裏有一個簡單的版本,使用`向量的:
#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毫秒。
如果我們把它改爲使用類型化的球拍:
#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毫秒。
如果您有興趣節省空間,可以使用構建向量的懶惰版本(例如[Lazy Racket的構建列表](http://docs.racket-lang.org/lazy/index.html) ),這樣一次只有一個元素需要在內存中。 –