From c5fc92c75205051ce01bba1781cd1c4ba0907765 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Tue, 11 Jan 2022 21:52:57 -0800 Subject: Make bindings visible while a guard is evaluated. The current implementation repeats the bindings twice, but I guess it's fine. It seems to work. --- match.csc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'match.csc') diff --git a/match.csc b/match.csc index d188349..3e02937 100644 --- a/match.csc +++ b/match.csc @@ -42,15 +42,16 @@ (define-syntax match (syntax-rules (when) ((match x (pattern (when condition) result result* ...)) - (if (and (matches? x pattern) - condition) - (bind-pattern x pattern result result* ...))) + (if (matches? x pattern) + (bind-pattern x pattern + (if condition + (begin result result* ...))))) ((match x (pattern result1 result2 ...)) (if (matches? x pattern) (bind-pattern x pattern result1 result2 ...))) ((match x (pattern (when condition) result result* ...) clause clause* ...) (if (and (matches? x pattern) - condition) + (bind-pattern x pattern condition)) (bind-pattern x pattern result result* ...) (match x clause clause* ...))) ((match x (pattern result1 result2 ...) clause1 clause2 ...) -- cgit v1.3.1