As I read the Clojure code of others, I come across better ways to write my own code. Today’s example comes from The Joy of Clojure by Michael Fogus and Chris Houser.
I often find myself writing anonymous functions along the lines of
#(not (vector? %))
to act as filters in various places (filter
, for
, take-while
,
etc.). I always thought it looked a bit gnarly like that.
Fortunately, there is a better way, using the comp
function.
According to the documentation string, comp
takes a number of
functions and returns a new function that is the composition of all of
them. I’ve used comp
a few other places before, but for some
reason, it didn’t “click” that I could use it in this situation, too.
With it, the above code transforms into the much cleaner-looking
(comp not vector?)
Looks much better without the anonymous function trappings, yes?
Update: I just came back to this post after a long time… Now I
probably wouldn’t even use comp
here, opting instead for
(complement vector?)
It keeps getting shorter!