I've been going through the PLEAC web site, writing Clojure examples
corresponding to the Perl code examples from the Perl Cookbook:

http://pleac.sourceforge.net

Michael Bacarella started a github repo to collect these together, and I'm
helping flesh some of them out.

https://github.com/mbacarella/pleac-clojure

One thing that is very convenient in Perl is doing sorts on multiple
comparison keys -- since 0 is treated as logically false in Perl, they can
simply do what in Clojure would look like:

(sort #(or (compare (key1 %1) (key2 %2))
                (compare (key2 %1) (key2 %2))
                ...)
         collection)

This doesn't work in Clojure, because it only treats nil or false as
logically false.  It is easy to write a short-circuiting macro 'multicmp'
that does the correct thing:

(defmacro multicmp
  ([x] x)
  ([x & next]
     `(let [cmp# ~x]
        (if (not= cmp# 0)
          cmp#
          (multicmp ~@next)))))

Then just replace 'or' in the first code snippet with 'multicmp'.

Does something like this already exist in a library I'm unaware of?  Would
others find it useful to have around?  And any suggestions on where it best
belongs if so?

Thanks,
Andy

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

Reply via email to