sequence-length: special case O(1) cases.

This commit is contained in:
Vincent St-Amour 2016-01-02 20:05:04 -06:00
parent 47f06f11e1
commit c47c0ebfca

View File

@ -41,8 +41,11 @@
(define (sequence-length s) (define (sequence-length s)
(unless (sequence? s) (raise-argument-error 'sequence-length "sequence?" s)) (unless (sequence? s) (raise-argument-error 'sequence-length "sequence?" s))
(cond [(vector? s) (vector-length s)]
[(hash? s) (hash-count s)]
[else
(for/fold ([c 0]) ([i (in-values*-sequence s)]) (for/fold ([c 0]) ([i (in-values*-sequence s)])
(add1 c))) (add1 c))]))
(define (sequence-ref s i) (define (sequence-ref s i)
(unless (sequence? s) (raise-argument-error 'sequence-ref "sequence?" s)) (unless (sequence? s) (raise-argument-error 'sequence-ref "sequence?" s))