-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsrfi-11.ss
31 lines (28 loc) · 1.45 KB
/
srfi-11.ss
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
(define-library (srfi 11)
(import (scheme r5rs))
(export let-values let*-values)
(begin (define-syntax let-values
(syntax-rules ()
((let-values (binding ...) body0 body1 ...)
(let-values "bind" (binding ...) () (begin body0 body1 ...)))
((let-values "bind" () tmps body)
(let tmps body))
((let-values "bind" ((b0 e0) binding ...) tmps body)
(let-values "mktmp" b0 e0 () (binding ...) tmps body))
((let-values "mktmp" () e0 args bindings tmps body)
(call-with-values (lambda () e0)
(lambda args
(let-values "bind" bindings tmps body))))
((let-values "mktmp" (a . b) e0 (arg ...) bindings (tmp ...) body)
(let-values "mktmp" b e0 (arg ... x) bindings (tmp ... (a x)) body))
((let-values "mktmp" a e0 (arg ...) bindings (tmp ...) body)
(call-with-values (lambda () e0)
(lambda (arg ... . x)
(let-values "bind" bindings (tmp ... (a x)) body))))))
(define-syntax let*-values
(syntax-rules ()
((let*-values () body0 body1 ...)
(let () body0 body1 ...))
((let*-values (binding0 binding1 ...) body0 body1 ...)
(let-values (binding0)
(let*-values (binding1 ...) body0 body1 ...)))))))