clean-up
;; [Listof Posn] Number Number Number Number ;; -> ;; [Listof Posn] ;; remove specks that are inside of ;; the specified boundaries (define (clean-up lop lft rgt top bot) (cond [(empty? lop) empty] [else (local ((define fst (first lop)) (define rst (clean-up (rest lop) lft rgt top bot))) (cond [(and (<= lft (posn-x fst) rgt) (<= top (posn-y fst) bot)) rst] [else (cons fst rst)]))])) ;; TESTS (equal? (clean-up (list (make-posn 10 10) (make-posn 100 50) (make-posn 20 10)) 10 20 10 20) (list (make-posn 100 50)))
Solution:
;; [PTS 2: 1 for filter, ;; 1 for correctness (function, not)] (define (clean-up lop lft rgt top bot) (local ((define (outside? fst) (not (and (<= lft (posn-x fst) rgt) (<= top (posn-y fst) rgt))))) (filter outside? lop)))