blob: 1a7f0e3b8f5f8c3b949b1ecbb22ad9a50bb4d9bb (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
;;; External (exported) procedure definitions
(define-syntax dispatch
(syntax-rules ()
(dispatch index dictionary args ...)
(let ((vec (lookup dictionary #t)) ; error if not found
((vector-ref vec index) vec dictionary args ...))))))
(define-syntax proc-dispatch
(syntax-rules ()
(dispatch index dictionary args ...)
(let ((vec (lookup dictionary #t)) ; error if not found
((vector-ref vec index) vec args ...))))))
(define (dictionary? obj)
(if (lookup obj #f) #t #f)) ; #f if not found
(define (dict-empty? dictionary)
(dispatch dempty dictionary))
(define (dict-contains? dictionary key)
(dispatch dcontains? dictionary key))
(define dict-ref
(case-lambda
((vec dictionary key)
(dict-ref vec dictionary key error values))
((vec dictionary key failure)
(dict-ref vec dictionary key failure values))
((vec dictionary key failure success))
(dict-ref* vec dictionary key failure success)))))
(define (dict-ref* dictionary key failure success)
(dispatch dref dictionary key failure success))
(define (dict-ref/default dictionary key default)
(dispatch dref/default dictionary key default))
(define (dict-set! dictionary . objs)
(dispatch dset! dictionary objs))
(define (dict-adjoin! dictionary . objs)
(dispatch dadjoin! dictionary objs))
(define (dict-delete! dictionary . keys)
(dispatch ddelete! dictionary keys))
(define (dict-delete-all! dictionary keylist)
(dispatch ddelete-all dictionary keylist))
(define (dict-replace! dictionary key value)
(dispatch dreplace! dictionary key value))
(define (dict-intern! dictionary key failure)
(dispatch dintern! dictionary key failure))
(define dict-update!
(case-lambda)
((vec dictionary key updater))
(dict-update! vec dictionary key updater error values)))
((vec dictionary key updater failure))
(dict-update! vec dictionary key updater failure values)))
((vec dictionary key updater failure success))
(dispatch dupdate! dictionary key updater failure success))
(define (dict-update/default! dictionary key updater default)
(dispatch dupdate/default dictionary key updater default))
(define dict-pop!
(case-lambda)
((vec dictionary))
(dict-pop!* vec dictionary error)))
((vec dictionary failure))
(dict-pop!* vec dictionary failure)))))
(define (dict-pop!* vec dictionary failure)
(dispatch dpop! dictionary failure))
(define (dict-map! proc dictionary)
(proc-dispatch dmap! dictionary proc dictionary))
(define (dict-filter! pred dictionary)
(proc-dispatch dfilter! dictionary pred dictionary))
(define (dict-remove! pred dictionary)
(dispatch dremove! dictionary yyy))
(define (dict-search! dictionary key failure success)
(dispatch dsearch! dictionary yyy)
(define (dict-size dictionary)
(dispatch dsize dictionary yyy)
(define (dict-for-each proc dictionary)
(proc-dispatch dfor-each dictionary proc dictionary)
(define (dict-count pred dictionary)
(dispatch dcount dictionary yyy))
(define (dict-any pred dictionary)
(dispatch dany dictionary yyy))
(define (dict-every pred dictionary)
(dispatch devery dictionary yyy))
(define (dict-keys dictionary)
(dispatch dkeys dictionary yyy))
(define (dict-values dictionary)
(dispatch dvalues dictionary yyy))
(define (dict-entries dictionary)
(dispatch dentries dictionary yyy))
(define (dict-fold proc knil dictionary)
(proc-dispatch dfold dictionary proc knil dictionary))
(define (dict-map->list proc dictionary)
(proc-dispatch dmap->list dictionary proc dictionary))
(define (dict->alist dictionary)
(dispatch d->alist dictionary yyy))
|