Skip to content

Commit 52b039c

Browse files
committed
Fix omission of match in fv and lambdas.
1 parent 6b6e79d commit 52b039c

9 files changed

Lines changed: 88 additions & 1 deletion

File tree

langs/loot/fv.rkt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,18 @@
1818
[(Let x e1 e2) (append (fv* e1) (remq* (list x) (fv* e2)))]
1919
[(App e1 es) (append (fv* e1) (append-map fv* es))]
2020
[(Lam f xs e) (remq* xs (fv* e))]
21+
[(Match e ps es) (append (fv* e) (append-map fv-clause* ps es))]
2122
[_ '()]))
23+
24+
;; Pat Expr -> [Listof Id]
25+
(define (fv-clause* p e)
26+
(remq* (bv-pat* p) (fv* e)))
27+
28+
;; Pat -> [Listof Id]
29+
(define (bv-pat* p)
30+
(match p
31+
[(PVar x) (list x)]
32+
[(PCons p1 p2) (append (bv-pat* p1) (bv-pat* p2))]
33+
[(PAnd p1 p2) (append (bv-pat* p1) (bv-pat* p2))]
34+
[(PBox p) (bv-pat* p)]
35+
[_ '()]))

langs/loot/lambdas.rkt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@
3131
[(Let x e1 e2) (append (lambdas-e e1) (lambdas-e e2))]
3232
[(App e1 es) (append (lambdas-e e1) (append-map lambdas-e es))]
3333
[(Lam f xs e1) (cons e (lambdas-e e1))]
34+
[(Match e ps es) (append (lambdas-e e) (append-map lambdas-e es))]
3435
[_ '()]))

langs/loot/test/test-runner.rkt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,21 @@
269269
0
270270
(+ n (tri (sub1 n)))))))
271271
36))
272-
666))
272+
666)
273+
(check-equal? (run '(define (tri n)
274+
(if (zero? n)
275+
0
276+
(+ n (tri (sub1 n)))))
277+
'(tri 36))
278+
666)
279+
(check-equal? (run '(define (tri n)
280+
(match n
281+
[0 0]
282+
[m (+ m (tri (sub1 m)))]))
283+
'(tri 36))
284+
666)
285+
(check-equal? (run '((match 8 [8 (lambda (x) x)]) 12))
286+
12))
273287

274288
(define (test-runner-io run)
275289
;; Evildoer examples

langs/mountebank/fv.rkt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,18 @@
1818
[(Let x e1 e2) (append (fv* e1) (remq* (list x) (fv* e2)))]
1919
[(App e1 es) (append (fv* e1) (append-map fv* es))]
2020
[(Lam f xs e) (remq* xs (fv* e))]
21+
[(Match e ps es) (append (fv* e) (append-map fv-clause* ps es))]
2122
[_ '()]))
23+
24+
;; Pat Expr -> [Listof Id]
25+
(define (fv-clause* p e)
26+
(remq* (bv-pat* p) (fv* e)))
27+
28+
;; Pat -> [Listof Id]
29+
(define (bv-pat* p)
30+
(match p
31+
[(PVar x) (list x)]
32+
[(PCons p1 p2) (append (bv-pat* p1) (bv-pat* p2))]
33+
[(PAnd p1 p2) (append (bv-pat* p1) (bv-pat* p2))]
34+
[(PBox p) (bv-pat* p)]
35+
[_ '()]))

langs/mountebank/lambdas.rkt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@
3131
[(Let x e1 e2) (append (lambdas-e e1) (lambdas-e e2))]
3232
[(App e1 es) (append (lambdas-e e1) (append-map lambdas-e es))]
3333
[(Lam f xs e1) (cons e (lambdas-e e1))]
34+
[(Match e ps es) (append (lambdas-e e) (append-map lambdas-e es))]
3435
[_ '()]))

langs/mountebank/test/test-runner.rkt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,20 @@
270270
(+ n (tri (sub1 n)))))))
271271
36))
272272
666)
273+
(check-equal? (run '(define (tri n)
274+
(if (zero? n)
275+
0
276+
(+ n (tri (sub1 n)))))
277+
'(tri 36))
278+
666)
279+
(check-equal? (run '(define (tri n)
280+
(match n
281+
[0 0]
282+
[m (+ m (tri (sub1 m)))]))
283+
'(tri 36))
284+
666)
285+
(check-equal? (run '((match 8 [8 (lambda (x) x)]) 12))
286+
12)
273287

274288
;; Mug examples
275289
(check-equal? (run '(symbol? 'foo)) #t)

langs/mug/fv.rkt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,18 @@
1818
[(Let x e1 e2) (append (fv* e1) (remq* (list x) (fv* e2)))]
1919
[(App e1 es) (append (fv* e1) (append-map fv* es))]
2020
[(Lam f xs e) (remq* xs (fv* e))]
21+
[(Match e ps es) (append (fv* e) (append-map fv-clause* ps es))]
2122
[_ '()]))
23+
24+
;; Pat Expr -> [Listof Id]
25+
(define (fv-clause* p e)
26+
(remq* (bv-pat* p) (fv* e)))
27+
28+
;; Pat -> [Listof Id]
29+
(define (bv-pat* p)
30+
(match p
31+
[(PVar x) (list x)]
32+
[(PCons p1 p2) (append (bv-pat* p1) (bv-pat* p2))]
33+
[(PAnd p1 p2) (append (bv-pat* p1) (bv-pat* p2))]
34+
[(PBox p) (bv-pat* p)]
35+
[_ '()]))

langs/mug/lambdas.rkt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@
3131
[(Let x e1 e2) (append (lambdas-e e1) (lambdas-e e2))]
3232
[(App e1 es) (append (lambdas-e e1) (append-map lambdas-e es))]
3333
[(Lam f xs e1) (cons e (lambdas-e e1))]
34+
[(Match e ps es) (append (lambdas-e e) (append-map lambdas-e es))]
3435
[_ '()]))

langs/mug/test/test-runner.rkt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,20 @@
270270
(+ n (tri (sub1 n)))))))
271271
36))
272272
666)
273+
(check-equal? (run '(define (tri n)
274+
(if (zero? n)
275+
0
276+
(+ n (tri (sub1 n)))))
277+
'(tri 36))
278+
666)
279+
(check-equal? (run '(define (tri n)
280+
(match n
281+
[0 0]
282+
[m (+ m (tri (sub1 m)))]))
283+
'(tri 36))
284+
666)
285+
(check-equal? (run '((match 8 [8 (lambda (x) x)]) 12))
286+
12)
273287

274288
;; Mug examples
275289
(check-equal? (run '(symbol? 'foo)) #t)

0 commit comments

Comments
 (0)