From 9d4b4fff3362820719c46fcf965adac3649b6d7e Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Mon, 11 May 2026 16:50:47 +0200 Subject: [PATCH] changed the implementation to call/cc --- main.rkt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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