blob: 7bf89acef0165dbb47d8f6b091af35bc564b3e63 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
(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)))))))
)
|