Work on new ldict implementation.
This commit is contained in:
parent
c34d4ca159
commit
6d3d7079cf
2 changed files with 44 additions and 7 deletions
|
@ -28,7 +28,10 @@
|
|||
(module
|
||||
util-dict-list
|
||||
(
|
||||
TAG-LDICT
|
||||
|
||||
make-ldict
|
||||
|
||||
ldict-has-key?
|
||||
ldict-ref
|
||||
ldict-remove
|
||||
|
@ -43,14 +46,30 @@
|
|||
|
||||
(import scheme
|
||||
(chicken base)
|
||||
testing)
|
||||
testing
|
||||
util-tag)
|
||||
|
||||
;; Returns an empty dictionary represented as empty list or a list of
|
||||
;; pre-initialized cons pairs.
|
||||
(define (make-dict . pairs)
|
||||
(if (null? pairs)
|
||||
'()
|
||||
(car pairs)))
|
||||
;; Tag used for identifying list dictionaries from this module
|
||||
(define TAG-LDICT (make-tag LDICT))
|
||||
|
||||
;; Creates an empty dictionary and optionally populates it with
|
||||
;; provided pairs. Default equality is eq?, default are '().
|
||||
(define (make-ldict . equality?/pairs)
|
||||
(let ((equality? (if (or (null? equality?/pairs)
|
||||
(not (procedure? (car equality?/pairs))))
|
||||
eq?
|
||||
(car equality?/pairs)))
|
||||
(pairs (if (or (null? equality?/pairs)
|
||||
(procedure? (car equality?/pairs)))
|
||||
'()
|
||||
(car equality?/pairs))))
|
||||
(let loop ((ld (list TAG-LDICT
|
||||
(list equality?)))
|
||||
(pairs pairs))
|
||||
(if (null? pairs)
|
||||
ld
|
||||
(loop (ldict-set ld (caar pairs) (cdar pairs))
|
||||
(cdr pairs))))))
|
||||
|
||||
;; Checks whether given dictionary d contains the key k.
|
||||
(define (dict-has-key? d k)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue