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)