(module (jimmy util) * (import scheme (chicken base) (chicken condition)) (define-syntax define-public (syntax-rules () ((define-public (name . arg) forms ...) (begin (export name) (define (name . arg) forms ...))) ((define-public (name args ...) forms ...) (begin (export name) (define (name args ...) forms ...))) ((define-public name value) (begin (export name) (define name value))))) (define-syntax ignore-errors (syntax-rules () ((ignore-errors x) (handle-exceptions e #f x)))) (define (alist-walk lis . keys) (if (null? keys) lis (let ((kv (assoc (car keys) lis))) (cond ((not kv) #f) ((atom? (cdr kv)) (and (null? (cdr keys)) ; this shouldn't error... (cdr kv))) ((list? (cdr kv)) (apply alist-walk (cdr kv) (cdr keys))))))) )