ambは再帰で書くと分かりにくいが、これならどうだ

(define-syntax amb
 (syntax-rules ()
  ((_ x ...)
   (let/cc yield
    (let/cc fallthrough
     (push! stack fallthrough)
     (yield x))
    ...
    ((pop! stack))))))