- (use extras)
- (use srfi-69)
- (define maxc 100000)
- (define maxran 100000)
- (time
- (let loop ((count maxc) (n (random maxran)) (alist (list)))
- (if (> count 0)
- (loop (- count 1)
- (random maxran)
- (if (alist-ref n alist)
- (alist-update n (+ (alist-ref n alist) 1) alist)
- (alist-update n 1 alist))))))
- (time
- (let loop ((count maxc) (n (random maxran)) (alist (list)))
- (if (> count 0)
- (begin
- (if (alist-ref n alist)
- (alist-update! n (+ (alist-ref n alist) 1) alist)
- (alist-update! n 1 alist))
- (loop (- count 1) (random maxran) alist)))))
- (time
- (let loop ((count maxc) (n (random maxran)) (alist (make-hash-table)))
- (if (> count 0)
- (begin
- (if (hash-table-exists? alist n)
- (hash-table-set! alist n (+ (hash-table-ref alist n) 1))
- (hash-table-set! alist n 1))
- (loop (- count 1) (random maxran) alist)))))
- (time
- (let loop ((count maxc) (n (random maxran)) (alist (make-hash-table)))
- (if (> count 0)
- (begin
- (hash-table-set! alist n (+ (hash-table-ref/default alist n 0) 1))
- (loop (- count 1) (random maxran) alist)))))
- ;650.477s CPU time, 381.043s GC time (major), 232987/813312 GCs (major/minor)
- ;0.014s CPU time, 0/171 GCs (major/minor)
- ;0.112s CPU time, 0.009s GC time (major), 142497 mutations, 5/719 GCs (major/minor)
- ;0.107s CPU time, 0.011s GC time (major), 142534 mutations, 3/640 GCs (major/minor)