about summary refs log tree commit diff stats
path: root/src/util.scm
diff options
context:
space:
mode:
authorCase Duckworth2024-05-18 21:15:54 -0500
committerCase Duckworth2024-05-18 21:15:54 -0500
commit727995a409632d4c143ba4b6b088c7df40f074e7 (patch)
tree3b2f291b2353314971288c0c3ad86d3825c6f825 /src/util.scm
parentRemove old code (diff)
downloadjimmy-727995a409632d4c143ba4b6b088c7df40f074e7.tar.gz
jimmy-727995a409632d4c143ba4b6b088c7df40f074e7.zip
Scheme bit!
Diffstat (limited to 'src/util.scm')
-rw-r--r--src/util.scm37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/util.scm b/src/util.scm new file mode 100644 index 0000000..7bf89ac --- /dev/null +++ b/src/util.scm
@@ -0,0 +1,37 @@
1(module (jimmy util) *
2
3 (import scheme (chicken base)
4 (chicken condition))
5
6 (define-syntax define-public
7 (syntax-rules ()
8 ((define-public (name . arg) forms ...)
9 (begin (export name)
10 (define (name . arg) forms ...)))
11 ((define-public (name args ...) forms ...)
12 (begin (export name)
13 (define (name args ...) forms ...)))
14 ((define-public name value)
15 (begin (export name)
16 (define name value)))))
17
18 (define-syntax ignore-errors
19 (syntax-rules ()
20 ((ignore-errors x)
21 (handle-exceptions e #f x))))
22
23 (define (alist-walk lis . keys)
24 (if (null? keys)
25 lis
26 (let ((kv (assoc (car keys) lis)))
27 (cond
28 ((not kv) #f)
29 ((atom? (cdr kv))
30 (and (null? (cdr keys)) ; this shouldn't error...
31 (cdr kv)))
32 ((list? (cdr kv))
33 (apply alist-walk (cdr kv) (cdr keys)))))))
34
35 )
36
37