rendered paste body(define-syntax iterate
(syntax-rules ()
; No final expression
((iterate loop (fold-vars ...) ((state-var init) ...) body)
(iterate loop (fold-vars ...) ((state-var init) ...) body
(values state-var ...)))
; Weird degenerate case with no iteration variables.
((iterate loop () ((state-var init) ...) body final)
(let loop ((state-var init) ...) body))
; All there
((iterate loop
((type value-var args ...) ...)
((state-var init) ...)
body
final)
((folder ((type value-var args ...) ...) (state-var ...) loop body)
(lambda (state-var ...)
final)
args ... ...
init ...))))