summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar John Cowan 2020-09-07 00:38:59 -0400
committerGravatar John Cowan 2020-09-07 00:38:59 -0400
commit5bc287a0651cefbda587dc7c599f72ab02159b4c (patch)
tree7edd06ebfca68f46bd28f5211b9da47b7427e01a
dictionary code initial
-rw-r--r--indexes.scm72
-rw-r--r--internals.scm135
2 files changed, 207 insertions, 0 deletions
diff --git a/indexes.scm b/indexes.scm
new file mode 100644
index 0000000..8969b33
--- /dev/null
+++ b/indexes.scm
@@ -0,0 +1,72 @@
+;;;; Indexes into dictionary vectors
+
+(define d? 0)
+(define dempty? 1)
+(define dcontains? 2)
+(define dref 3)
+(define dref/default 4)
+(define dset! 5)
+(define dadjoin! 6)
+(define ddelete! 7)
+(define ddelete-all! 8)
+(define dreplace! 9)
+(define dintern! 10)
+(define dupdate! 11)
+(define dupdate/default! 12)
+(define dpop! 13)
+(define dmap! 14)
+(define dfilter! 15)
+(define dremove! 16)
+(define dsearch! 17)
+(define dsize 18)
+(define dfor-each 19)
+(define dcount 20)
+(define dany 21)
+(define devery 22)
+(define dkeys 23)
+(define dvalues 24)
+(define dentries 25)
+(define dfold 26)
+(define dmap->list 27)
+(define ddict->alist 28)
+
+;;; To call an internal procedure from another internal procedure:
+;;; (dcall dref/default vec dict key default)
+
+(define-syntax dcall
+ (syntax-rules ()
+ ((dcall dindex vec arg ...)
+ ((vector-ref vec dindex) arg ...))))
+
+;;; maps names to indexes
+
+(define dname-map
+ `(dictionary? . ,d?)
+ (dict-empty? . ,dempty?)
+ (dict-contains? . ,dcontains?)
+ (dict-ref . ,dref)
+ (dict-ref/default . ,dref/default)
+ (dict-set! . ,dset!)
+ (dict-adjoin! . ,dadjoin!)
+ (dict-delete! . ,ddelete!)
+ (dict-delete-all! . ,ddelete-all!)
+ (dict-replace! . ,dreplace!)
+ (dict-intern! . ,dintern!)
+ (dict-update! . ,dupdate!)
+ (dict-update/default! . ,dupdate/default!)
+ (dict-pop! . ,dpop!)
+ (dict-map! . ,dmap!)
+ (dict-filter! . ,dfilter!)
+ (dict-remove! . ,dremove!)
+ (dict-search! . ,dsearch!)
+ (dict-size . ,dsize)
+ (dict-for-each . ,dfor-each)
+ (dict-count . ,dcount)
+ (dict-any . ,dany)
+ (dict-every . ,devery)
+ (dict-keys . ,dkeys)
+ (dict-values . ,dvalues)
+ (dict-entries . ,dentries)
+ (dict-fold . ,dfold)
+ (dict-map->list . ,dmap->list)
+ (dict->alist . ,d->alist))
diff --git a/internals.scm b/internals.scm
new file mode 100644
index 0000000..9e30e6c
--- /dev/null
+++ b/internals.scm
@@ -0,0 +1,135 @@
+;;; Internal procedure definitions (all take a vec argument first)
+
+(define (idictionary? obj)
+ (error "dictionary? method not defined"))
+
+(define (idict-empty? dictionary)
+ #f)
+
+(define (idict-contains? dictionary key)
+ #f)
+
+(define idict-ref
+ (case-lambda
+ ((vec dictionary key)
+ (idict-ref* vec dictionary key error values))
+ ((vec dictionary key failure)
+ (idict-ref* vec dictionary key failure values))
+ ((vec dictionary key failure success)
+ (idict-ref* vec dictionary key failure success))))
+
+(define (idict-ref* dictionary key failure success)
+ #f)
+
+(define idict-ref
+ (case-lambda
+ ((vec dictionary key)
+ (idict-ref* vec dictionary key error values))
+ ((vec dictionary key failure)
+ (idict-ref* vec dictionary key failure values))
+ ((vec dictionary key failure success)
+ (idict-ref* vec dictionary key failure success))))
+
+(define (idict-ref* vec dictionary key failure success)
+ #f)
+
+(define (idict-ref/default dictionary key default)
+ #f)
+
+(define (idict-set! dictionary . objs)
+ #f)
+
+(define (idict-adjoin! dictionary . objs)
+ #f)
+
+(define (idict-delete! dictionary . keys)
+ #f)
+
+(define (idict-delete-all! dictionary keylist)
+ #f)
+
+(define (idict-replace! dictionary key value)
+ #f)
+
+(define (idict-intern! dictionary key failure)
+ #f)
+
+(define idict-update!
+ (case-lambda
+ ((vec dictionary key updater)
+ (idict-update!* vec dictionary key updater error values))
+ ((vec dictionary key updater failure)
+ (idict-update!* vec dictionary key updater failure values))
+ ((vec dictionary key updater failure success)
+ (idict-update!* vec dictionary key updater failure success))))
+
+(define (idict-update!* vec dictionary key updater failure success)
+ #f)
+
+(define (idict-update/default! dictionary key updater default)
+ #f)
+
+(define idict-pop!
+ (case-lambda
+ ((vec dictionary)
+ (idict-pop!* vec dictionary error))
+ ((vec dictionary failure)
+ (idict-pop!* vec dictionary failure))))
+
+(define (idict-pop!* vec dictionary failure)
+ #f)
+
+(define (idict-map! proc dictionary)
+ (error "dict-map method not defined"))
+
+(define (idict-filter! pred dictionary)
+ (error "dict-filter! method not defined"))
+
+(define (idict-remove! dictionary pred)
+ #f)
+
+(define (idict-search! dictionary key failure success)
+ (error "dict-search! method not defined"))
+
+(define (idict-size dictionary)
+ (error "dict-size method not defined"))
+
+(define (idict-for-each proc dictionary)
+ (error "dict-for-each method not defined"))
+
+(define (idict-count pred dictionary)
+ #f)
+
+(define (idict-any pred dictionary)
+ #f)
+
+(define (idict-every pred dictionary)
+ #f)
+
+(define (idict-keys dictionary)
+ #f)
+
+(define (idict-values dictionary)
+ #f)
+
+(define (idict-entries dictionary)
+ #f)
+
+(define (idict-fold proc knil dictionary)
+ #f)
+
+(define (idict-map->list proc dictionary)
+ #f)
+
+(define (idict->alist dictionary)
+ #f)
+
+(define model-vec #(
+ idictionary? idict-empty? idict-contains? idict-ref
+ idict-ref/default idict-set! idict-adjoin! idict-delete!
+ idict-delete-all! idict-replace! idict-intern!
+ idict-update! idict-pop! idict-map! idict-filter!
+ idict-remove! idict-search! idict-size idict-for-each
+ idict-count idict-any idict-every idict-keys
+ idict-values idict-entries idict-fold idict-map->list
+ idict->alist))