UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture15/ with-return.rkt
#lang plait
(define return-k
  (make-parameter
   (lambda (v) (error 'return "outside with-return"))))

(define (return v) ((parameter-ref return-k) v))

(define-syntax-rule (with-return exprs ...)
  (let/cc calling-context
    (parameterize ([return-k calling-context])
      (begin exprs ...))))

(with-return
  (return 42) (/ 1 0))