You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
22 lines
689 B
Racket
22 lines
689 B
Racket
#lang racket/base
|
|
(require sugar/list)
|
|
(provide (all-defined-out))
|
|
|
|
(define (assoc? x) (and (pair? x) (not (list? x))))
|
|
(define (assocs? xs) (and (list? xs) (andmap assoc? xs)))
|
|
|
|
(define (listify kvs)
|
|
(for/list ([slice (in-list (slice-at kvs 2))])
|
|
(cons (car slice) (cadr slice))))
|
|
(define-syntax-rule (define-hashifier id hasher) (define (id . kvs) (hasher (listify kvs))))
|
|
|
|
;; like indefinite-arity `hash` but mutable
|
|
(define-hashifier mhash make-hash)
|
|
(define-hashifier mhasheq make-hasheq)
|
|
(define-hashifier mhasheqv make-hasheqv)
|
|
|
|
(module+ test
|
|
(require rackunit)
|
|
(check-equal? (mhash 'k "v") (make-hash (list (cons 'k "v")))))
|
|
|
|
(define (dictify . xs) (listify xs)) |