mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 12:35:05 +02:00
Attempt alternative let-values macro
This commit is contained in:
parent
587d83f6b7
commit
2e5a4adcd2
1 changed files with 69 additions and 1 deletions
|
@ -1434,7 +1434,7 @@
|
||||||
(call-with-values (lambda () expr)
|
(call-with-values (lambda () expr)
|
||||||
(lambda params (let*-values rest . body))))))
|
(lambda params (let*-values rest . body))))))
|
||||||
|
|
||||||
(define-syntax let-values
|
#;(define-syntax let-values
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((let-values ("step") (binds ...) bind expr maps () () . body)
|
((let-values ("step") (binds ...) bind expr maps () () . body)
|
||||||
(let*-values (binds ... (bind expr)) (let maps . body)))
|
(let*-values (binds ... (bind expr)) (let maps . body)))
|
||||||
|
@ -1448,6 +1448,74 @@
|
||||||
(let-values ("step") () () expr () params rest . body))
|
(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
|
(define-syntax guard
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((guard (var clause ...) e1 e2 ...)
|
((guard (var clause ...) e1 e2 ...)
|
||||||
|
|
Loading…
Add table
Reference in a new issue