(module misc mzscheme (provide (all-defined)) (define (map/separated proc separator items) (if (null? items) null (cons (proc (car items)) (let loop ([items (cdr items)]) (if (null? items) null (cons (separator) (cons (proc (car items)) (loop (cdr items))))))))) (define (for-each/separated proc separator items) (if (null? items) (void) (begin (proc (car items)) (let loop ([items (cdr items)]) (if (null? items) (void) (begin (separator) (proc (car items)) (loop (cdr items)))))))) (define (format-byte-count n) (cond [(< -1 n 10000) (format "~s bytes" n)] [(< n 1000000) (format "~s KB" (quotient n 1000))] [(< n 1000000000) (format "~s MB" (quotient n 1000000))] [else (format "~s GB" (quotient n 1000000000))])) (define (hash-table-put-fresh! ht key val) (let/ec k (hash-table-get ht key (lambda _ (hash-table-put! ht key val) (k (void)))) (error 'hash-table-put-fresh! "key already exists"))) )