diff --git a/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt b/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt index 00940666b9..4f34bfef93 100644 --- a/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt +++ b/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt @@ -102,8 +102,16 @@ [`(variable-except ,s ...) (apply except/e var/e s)] [`(variable-prefix ,s) - ;; todo - (unimplemented "var-prefix")] + (define as-str (symbol->string s)) + (map/e (compose string->symbol + (curry string-append as-str) + symbol->string) + (compose string->symbol + list->string + (curry (flip drop) (string-length as-str)) + string->list + symbol->string) + var/e)] [`variable-not-otherwise-mentioned unused/e] [`hole @@ -323,3 +331,7 @@ (disj-sum/e #:alternate? #t (cons base/e (negate pair?)) (cons (cons/e any/e any/e) pair?))))) + +(define (flip f) + (λ (x y) + (f y x))) diff --git a/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt b/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt index a4caad64c1..a602a28c18 100644 --- a/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt +++ b/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt @@ -101,17 +101,21 @@ (n (p_!_1 p_!_1)) (x number)) ;; Mismatch isn't working for now, will come back to this. -#;#;#; -(try-it 100 M m) -(try-it 100 M n) -(try-it 100 M p) -;; test variable-not-otherwise-mentioned -(define-language VarMentioned +;; (try-it 100 M m) +;; (try-it 100 M n) +;; (try-it 100 M p) + +;; test variable filtering +(define-language Vars (mention a b c x y z 2 #f #\c (vec 1 2)) - (var variable-not-otherwise-mentioned)) + (varpre (variable-prefix moo)) + (varexc (variable-except x λ)) + (varnom variable-not-otherwise-mentioned)) -(try-it 20 VarMentioned var) +(try-it 100 Vars varpre) +(try-it 100 Vars varexc) +(try-it 100 Vars varnom) ;; Named repeats (define-language NRep