File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ [_ '() ]))
Original file line number Diff line number Diff line change 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 [_ '() ]))
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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+ [_ '() ]))
Original file line number Diff line number Diff line change 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 [_ '() ]))
Original file line number Diff line number Diff line change 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 )
Original file line number Diff line number Diff line change 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+ [_ '() ]))
Original file line number Diff line number Diff line change 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 [_ '() ]))
Original file line number Diff line number Diff line change 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 )
You can’t perform that action at this time.
0 commit comments