diff --git a/main.rkt b/main.rkt index 4a56730..f06f306 100644 --- a/main.rkt +++ b/main.rkt @@ -55,6 +55,31 @@ (define a-true? (a-eq? #t)) (define a-false? (a-eq? #f)) + +(define-syntax assert-expr + (syntax-rules () + ((_ fail (expr cond retval)) + (let ((a expr)) (if (cond a) a (fail retval)))) + ((_ fail (expr)) expr) + ) + ) + +(define-syntax let/assert + (syntax-rules () + ((_ fail ((v rest ...) ...) b1 ...) + (call/cc + (λ (fail) + (let* ((v (assert-expr fail (rest ...))) + ...) + b1 + ...) + ) + ) + ) + ) + ) + +#| (struct exn:let/assert exn (value) #:transparent) (define (raise-let/assert v) @@ -85,3 +110,4 @@ ) ) ) +|# \ No newline at end of file