From c47c0ebfca088e9b5c3079c133931244906c0edd Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Sat, 2 Jan 2016 20:05:04 -0600 Subject: [PATCH] sequence-length: special case O(1) cases. --- racket/collects/racket/sequence.rkt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/racket/collects/racket/sequence.rkt b/racket/collects/racket/sequence.rkt index cd68cd305c..128d71cd17 100644 --- a/racket/collects/racket/sequence.rkt +++ b/racket/collects/racket/sequence.rkt @@ -41,8 +41,11 @@ (define (sequence-length s) (unless (sequence? s) (raise-argument-error 'sequence-length "sequence?" s)) - (for/fold ([c 0]) ([i (in-values*-sequence s)]) - (add1 c))) + (cond [(vector? s) (vector-length s)] + [(hash? s) (hash-count s)] + [else + (for/fold ([c 0]) ([i (in-values*-sequence s)]) + (add1 c))])) (define (sequence-ref s i) (unless (sequence? s) (raise-argument-error 'sequence-ref "sequence?" s))