Hey Carlo, Excellent, thank you very much! I haven't tried it yet but it looks good.
Cheers, David On 15 November 2012 00:20, Carlo Zancanaro <carlozancan...@gmail.com> wrote: > Hey David, > > > I guess its got something to do with the fact that match itself is a > macro? > > Correct. The match macro just takes the list `(!nil? a)`, which isn't > a valid match form, so it complains about it. > > > Is there some other way that I could extend match to only match when the > variable is not nil? > > Yep! You just need to replace the match macro itself, rather than > trying to change the rows. > > Here's my go at it: > > (def not-nil? (complement nil?)) > > (defmacro match-nn [expr & matches] > (let [add-guard (fn [e] > (if (symbol? e) > (list e :guard `not-nil?) > e)) > guard-row (fn [[cond result]] > (if (vector? cond) > [(vec (map add-guard cond)) result] > [cond result])) > rows (partition 2 matches) > new-rows (mapcat guard-row rows)] > `(match ~expr > ~@new-rows))) > > (defmacro match-pred [expr & matches] > (let [add-guard (fn [e] > (if (and (seq? e) > (not= (second e) :guard)) > (list (second e) :guard (first e)) > e)) > guard-row (fn [[cond result]] > (if (vector? cond) > [(vec (map add-guard cond)) result] > [cond result])) > rows (partition 2 matches) > new-rows (mapcat guard-row rows)] > `(match ~expr > ~@new-rows))) > > > > `match-nn` will make sure all matched variables satisfy the `not-nil?` > predicate. `match-pred` will allow you to write guards like `(not-nil? > a)` and have it translated to `(a :guard not-nil?)`. > > I hope that helps! > > -- > 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 > -- David Jagoe davidja...@gmail.com +18053284389 -- 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