From d2448666170d9d365217c24395b4bc96ec2b2bd2 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sat, 9 Jul 2016 13:21:20 -0400 Subject: [PATCH] Fix match-value/captures for vectors (and hence structs) --- racket/syndicate/pattern.rkt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/racket/syndicate/pattern.rkt b/racket/syndicate/pattern.rkt index a341ff8..cd7efef 100644 --- a/racket/syndicate/pattern.rkt +++ b/racket/syndicate/pattern.rkt @@ -42,8 +42,10 @@ [#f #f] [c (walk v2 p2 c)])] [((? vector? v) (? vector? p)) #:when (= (vector-length v) (vector-length p)) - (for/fold [(c captures-rev)] [(vv (in-vector v)) (pp (in-vector p))] - (walk vv pp c))] + (define limit (vector-length v)) + (do ((c captures-rev (walk (vector-ref v i) (vector-ref p i) c)) + (i 0 (+ i 1))) + ((or (= i limit) (not c)) c))] [(_ _) #:when (or (treap? v) (treap? p)) (error 'match-value/captures "Cannot match on treaps at present")] [((? non-object-struct?) (? non-object-struct?))