Re: Lists as dictionaries
Lassi Kortela 20 Jul 2021 17:23 UTC
> Unless another mechanism is employed (for example a type descriptor as
> the first argument),
Would this work?
;; SRFI implementation:
(define alist-magic (gensym)) ; or some gensym-like thing we have
(define plist-magic (gensym))
(define (alist-dict alist) (cons alist-magic alist))
(define (plist-dict plist) (cons plist-magic plist))
(define (alist-dict? obj) (and (pair? obj) (eq? alist-magic (car obj))
(define (plist-dict? obj) (and (pair? obj) (eq? plist-magic (car obj))
;; Examples:
(define foo '((a . 1) (b . 2) (c . 3)))
(define bar '(a 1 b 2 c 3))
(dict-keys foo) ; is an error
(dict-keys bar) ; is an error
(dict-keys (alist-dict foo)) ; => (a b c)
(dict-keys (plist-dict bar)) ; => (a b c)