Attempt alternative let-values macro

This commit is contained in:
Justin Ethier 2016-08-31 23:38:14 -04:00
parent 587d83f6b7
commit 2e5a4adcd2

View file

@ -1434,7 +1434,7 @@
(call-with-values (lambda () expr)
(lambda params (let*-values rest . body))))))
(define-syntax let-values
#;(define-syntax let-values
(syntax-rules ()
((let-values ("step") (binds ...) bind expr maps () () . body)
(let*-values (binds ... (bind expr)) (let maps . body)))
@ -1448,6 +1448,74 @@
(let-values ("step") () () expr () params rest . body))
))
(define-syntax
let-values
(syntax-rules
()
((let-values (binding ...) body0 body1 ...)
(let-values
"bind"
(binding ...)
()
((lambda () body0 body1 ...))))
;(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)
(lambda (arg ... . x)
(let-values "bind" bindings (tmp ... (a x)) body))))))
(define-syntax guard
(syntax-rules ()
((guard (var clause ...) e1 e2 ...)