I think it's easier to think about combining predicates separately
from your file-filtering code. I'd use a higher-order function like
the following

 (defn combine-preds
   [& preds]
   (fn [& args] (every? #(apply % args) preds)))

I've noticed that most uses of this kind of thing are for fixed sets of predicates, and almost always for two, so I'd define:

(defmacro both [p1 p2]
  `(fn [& args#]
     (and (apply ~p1 args#)
          (apply ~p2 args#))))

Which reads nicely:

(filter (both number? even?) (range 1 7))

and is probably more efficient (not that I've tested it).

You can generalize this to `all`, of course.
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to