#!r6rs ;; Experimental python-like dictionary. Import this qualified, eg: ;; (import (prefix (dict) dict/)) ;; or ;; (import (prefix (dict) dict.)) (library (bs dict (2)) (export empty new dict dict? keys vals contains? set get del update map) (import (rnrs base) (srfi srfi-69)) (define (empty) (make-hash-table)) (define (new tuples) (let ([dict (make-hash-table)]) (map (lambda (k . v) (hash-table-set! dict k v)) tuples) dict)) (define (dict? dict) (hash-table? dict)) (define (keys dict) (hash-table-keys dict)) (define (vals dict) (hash-table-values dict)) (define (len dict) (hash-table-size dict)) (define (contains? dict key) (hash-table-exists? dict key)) (define (set dict key value) (hash-table-set! dict key value)) (define (get dict key) (hash-table-ref dict key #f)) (define (del dict key) (hash-table-delete! dict key)) (define (update dict key func) (hash-table-update! dict key func (lambda () '()))) (define (map func dict) (hash-table-walk dict func)))