(define (>>= m f) (f m)) (define-syntax dodo (syntax-rules (<-) ((_ exp) exp) ((_ var <- exp r ...) (>>= exp (lambda (var) (dodo r ...)))) ((_ exp r ...) (>>= exp (lambda (_) (dodo r ...)))))) (dodo a <- (add1 0) (print "a: " a) b <- (add1 a) (print (list a b))) ;; $ csi -qbn do-syntax.scm ;; a: 1 ;; (1 2)