;;;; chicken-primitive-alist.scm ;;;; Kon Lovett, Apr '09 (define-inline (%alist-ref key al #!optional (test eq?) def) (let loop ((al al)) (cond ((%null? al) def ) ((test key (%caar al)) (%cdar al) ) (else (loop (%cdr al)) ) ) ) ) (define-inline (%alist-update! key val al0 #!optional (test eq?)) (let loop ((al al0)) (cond ((%null? al) (%cons (%cons key val) al0) ) ((test key (%caar al)) (%set-cdr! (%car al) val) al0 ) (else (loop (%cdr al)) ) ) ) ) (define-inline (%alist-delete! key al0 #!optional (test eq?)) (let loop ((al al0) (prv #f)) (cond ((%null? al) al0) ((test key (%caar al)) (if prv (begin (%set-cdr! prv (%cdr al)) al0) (%cdr al)) ) (else (loop (%cdr al) al) ) ) ) ) (define-inline (%alist-find proc al #!optional def) (let loop ((al al)) (cond ((%null? al) def ) ((proc (%caar al) (%cdar al)) (%cdar al) ) (else (loop (%cdr al)) ) ) ) )