diff options
| author | 2020-09-07 00:38:59 -0400 | |
|---|---|---|
| committer | 2020-09-07 00:38:59 -0400 | |
| commit | 5bc287a0651cefbda587dc7c599f72ab02159b4c (patch) | |
| tree | 7edd06ebfca68f46bd28f5211b9da47b7427e01a | |
dictionary code initial
| -rw-r--r-- | indexes.scm | 72 | ||||
| -rw-r--r-- | internals.scm | 135 |
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)) |
