diff options
| author | 2020-10-19 00:16:32 -0400 | |
|---|---|---|
| committer | 2020-10-19 00:16:32 -0400 | |
| commit | b3e41bcd989e76efbb59d66002c31b342a5ccae4 (patch) | |
| tree | 4cc36dce2842ade22116d37eff30f4f1afe0c7f4 /internals.scm | |
| parent | Merge pull request #1 from arvyy/master (diff) | |
| parent | fix plist size proc; rewrite dict-entries to use fold (diff) | |
Merge pull request #2 from arvyy/master
Create library, rewrite tests against external api, add alist, plist and srfi69/125 implementation
Diffstat (limited to 'internals.scm')
| -rw-r--r-- | internals.scm | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/internals.scm b/internals.scm index c732684..9652aaa 100644 --- a/internals.scm +++ b/internals.scm @@ -46,7 +46,7 @@ ((null? objs) dictionary) ((null? (cdr objs)) - (error "mismatch of key / values argument list")) + (error "mismatch of key / values argument list" objs)) (else (let*-values (((key) (car objs)) ((value) (cadr objs)) @@ -58,13 +58,13 @@ (loop (cddr objs) new-d)))))) -(define (idict-set! vec dictionary . objs) +(define (idict-set! vec dictionary objs) (idict-set!* vec dictionary #f objs)) -(define (idict-adjoin! vec dictionary . objs) +(define (idict-adjoin! vec dictionary objs) (idict-set!* vec dictionary #t objs)) -(define (idict-delete! vec dictionary . keys) +(define (idict-delete! vec dictionary keys) (dcall ddelete-all! vec dictionary keys)) (define (idict-delete-all! vec dictionary keylist) @@ -122,7 +122,7 @@ (dcall dfor-each vec (lambda (key value) (define new-dict - (dcall ddelete! vec dictionary key)) + (dcall ddelete! vec dictionary (list key))) (cont new-dict key value)) dictionary)))) (define empty? (dcall dempty? vec dictionary)) @@ -198,8 +198,15 @@ dictionary))) (define (idict-entries vec dictionary) - (values (dcall dkeys vec dictionary) - (dcall dvalues vec dictionary))) + (define pair + (dcall dfold vec + (lambda (key value acc) + (cons (cons key (car acc)) + (cons value (cdr acc)))) + (cons '() '()) + dictionary)) + (values (reverse (car pair)) + (reverse (cdr pair)))) (define (idict-fold vec proc knil dictionary) (define acc knil) @@ -210,13 +217,13 @@ acc) (define (idict-map->list vec proc dictionary) - (call-with-values - (lambda () - (dcall dentries vec dictionary)) - (lambda (keys vals) - (map proc - keys - vals)))) + (define reverse-lst + (dcall dfold vec + (lambda (key value lst) + (cons (proc key value) lst)) + '() + dictionary)) + (reverse reverse-lst)) (define (idict->alist vec dictionary) (dcall dmap->list vec |
