summaryrefslogtreecommitdiffstats
path: root/internals.scm
diff options
context:
space:
mode:
authorGravatar John Cowan 2020-10-19 00:16:32 -0400
committerGravatar GitHub 2020-10-19 00:16:32 -0400
commitb3e41bcd989e76efbb59d66002c31b342a5ccae4 (patch)
tree4cc36dce2842ade22116d37eff30f4f1afe0c7f4 /internals.scm
parentMerge pull request #1 from arvyy/master (diff)
parentfix 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.scm35
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