set:refactor maps
This commit is contained in:
parent
ad49a18de5
commit
40b03b5714
57
set.scm
57
set.scm
|
@ -289,6 +289,30 @@
|
|||
(lambda (node)
|
||||
(cdr (set:get node '=))))
|
||||
|
||||
(define map:update
|
||||
(lambda (%update-recursive)
|
||||
(lambda (tree key update)
|
||||
(%update-recursive tree (map:empty-node key '())
|
||||
update))))
|
||||
|
||||
(define map:insert
|
||||
(lambda (%update-recursive)
|
||||
(let ((insert (set:insert %update-recursive)))
|
||||
(lambda (tree key val)
|
||||
(insert tree (map:empty-node key val))))))
|
||||
|
||||
(define map:search
|
||||
(lambda (<=>)
|
||||
(let ((search (set:in <=>)))
|
||||
(lambda (tree key)
|
||||
(search tree (cons key '()))))))
|
||||
|
||||
(define map:delete
|
||||
(lambda (<=>)
|
||||
(let ((delete (set:delete <=>)))
|
||||
(lambda (tree key)
|
||||
(delete tree (map:empty-node key '()))))))
|
||||
|
||||
;;; ;;;;;;;;;;;
|
||||
;;; For strings
|
||||
;;; ;;;;;;;;;;;
|
||||
|
@ -309,37 +333,12 @@
|
|||
(list-set! (cdr lst) (- n 1) val)))))
|
||||
|
||||
(define map:string<=> (set:<=>-to-map string<=>))
|
||||
|
||||
(define %smap:update (set:update map:string<=>))
|
||||
(define %smap:insert (set:insert %smap:update))
|
||||
|
||||
;;; (SMAP:UPDATE TREE KEY UPDATE) updates NODE in TREE with
|
||||
;;; (UPDATE NODE-WITH-KEY NODE), where NODE-WITH-KEY is an empty node
|
||||
;;; with the key KEY, and (UPDATE NODE-WITH-KEY #F) if no NODE is
|
||||
;;; found.
|
||||
(define smap:update
|
||||
(lambda (tree key update)
|
||||
(%smap:update tree (map:empty-node key '()) update)))
|
||||
|
||||
;;; (SMAP:INSERT TREE KEY VAL) inserts (CONS KEY VAL) into TREE, and
|
||||
;;; returns (CONS NEWROOT FOUND), where NEWROOT is the new root of
|
||||
;;; the tree, and FOUND is #F if no element matching KEY was found,
|
||||
;;; or the matching element if found.
|
||||
(define smap:insert
|
||||
(lambda (tree key val)
|
||||
(%smap:insert tree (map:empty-node key val))))
|
||||
|
||||
(define %smap:search (set:in map:string<=>))
|
||||
|
||||
;;; (SMAP:SEARCH TREE KEY)
|
||||
(define smap:search
|
||||
(lambda (tree key)
|
||||
(%smap:search tree (cons key '()))))
|
||||
|
||||
(define %smap:delete (set:delete map:string<=>))
|
||||
(define smap:delete
|
||||
(lambda (tree key)
|
||||
(%smap:delete tree (map:empty-node key '()))))
|
||||
(define smap:update (map:update %smap:update))
|
||||
(define smap:insert (map:insert %smap:update))
|
||||
(define smap:search (map:search map:string<=>))
|
||||
(define smap:delete (map:delete map:string<=>))
|
||||
|
||||
;;; ;;;;;
|
||||
;;; Tests
|
||||
|
|
Loading…
Reference in New Issue