Optimize filter operations.

(cherry picked from commit bce90e2a71)
This commit is contained in:
Vincent St-Amour 2011-04-18 13:25:28 -04:00 committed by Eli Barzilay
parent 34ae8d15bf
commit 2db9698835

View File

@ -129,7 +129,9 @@
(cond [(for/or ([f (in-list (append (cdr fs) result))]) (cond [(for/or ([f (in-list (append (cdr fs) result))])
(opposite? f t)) (opposite? f t))
-top] -top]
[(for/or ([f (in-list result)]) (or (filter-equal? f t) (implied-atomic? f t))) [(let ([t-seq (Rep-seq t)])
(for/or ([f (in-list result)])
(or (= (Rep-seq f) t-seq) (implied-atomic? f t))))
(loop (cdr fs) result)] (loop (cdr fs) result)]
[else [else
(loop (cdr fs) (cons t result))])])))) (loop (cdr fs) (cons t result))])]))))
@ -139,7 +141,7 @@
(case-lambda [() -top] (case-lambda [() -top]
[(f) f] [(f) f]
[fs (make-AndFilter fs)])) [fs (make-AndFilter fs)]))
(let loop ([fs (remove-duplicates args filter-equal?)] [result null]) (let loop ([fs (remove-duplicates args equal? #:key Rep-seq)] [result null])
(if (null? fs) (if (null? fs)
(match result (match result
[(list) -top] [(list) -top]
@ -158,7 +160,9 @@
[t (cond [(for/or ([f (in-list (append (cdr fs) result))]) [t (cond [(for/or ([f (in-list (append (cdr fs) result))])
(opposite? f t)) (opposite? f t))
-bot] -bot]
[(for/or ([f (in-list result)]) (or (filter-equal? f t) (implied-atomic? t f))) [(let ([t-seq (Rep-seq t)])
(for/or ([f (in-list result)])
(or (= (Rep-seq f) t-seq) (implied-atomic? t f))))
(loop (cdr fs) result)] (loop (cdr fs) result)]
[else [else
(loop (cdr fs) (cons t result))])])))) (loop (cdr fs) (cons t result))])]))))