(use matchable ) (define (filter->query f) (map (lambda (r) (match r ((y 'is . x) (cons y x)) ((y 'is-not . x) (cons y (conc "!" x))) ((y 'contains . x) (cons y (conc "~" x))) ((y 'contains-not . x) (cons y (conc "!~" x))) ((y 'ends . x) (cons y (conc "$" x))) ((y 'starts . x) (cons y (conc "^" x)))) f)))