From b324db28900f3bc890ec89977501134939e2686b Mon Sep 17 00:00:00 2001 From: Christian Jaeger Date: Wed, 12 Aug 2020 22:14:02 +0100 Subject: [PATCH] cj-env-2: pmatch: use equal not eq, treat self-quoting values as quoted --- cj-env-2.scm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/cj-env-2.scm b/cj-env-2.scm index c7bb234..41f6dee 100644 --- a/cj-env-2.scm +++ b/cj-env-2.scm @@ -177,11 +177,15 @@ (set! have-else? #t) `(else ,@rest)) (`(`pexpr . `rest) - (mcase pexpr - (`(quote `val) - `((eq? ,V ',val) ,@rest)) - (else - `((,pexpr ,V) ,@rest))))) + `(,(mcase pexpr + (self-quoting? + `(equal? ,V ,pexpr)) + (`(quote `val) + `(equal? ,V ',val)) + (else + ;; predicate + `(,pexpr ,V))) + ,@rest))) cases))) `(let ((,V ,expr)) (cond ,@cases* @@ -191,11 +195,17 @@ (TEST > (define (t v) (pmatch v + (123.4 'is-123_4) (number? 'num) ('foo 'is-foo) + ("bar" 'is-bar) (string? 'str))) > (t "foo") str + > (t "bar") + is-bar + > (t 123.4) + is-123_4 > (t 'foo) is-foo > (t 123)