Thank you for a comprehensive explanation!!!
On Jun 25, 1:17 am, Richard Newman <holyg...@gmail.com> wrote:
> > Why does this work?
>
> > (take-while (complement #{\a\e\i\o\u}) "the-quick-brown-fox")
>
> > When I do something similar, like
>
> > (take-while (complement #(Character/isWhitespace %)) "the-quick-brown-
> > fox")
>
> > I have to deal with the parameter explicitly ("%"). How is the
> > parameter hidden in the set/function?
>
> The set *is* a function (it implements IFn). complement accepts a
> function as input, so that works.
>
> Character/isWhitespace is a Java static method, which is not a first-
> class function, and thus can't be passed directly to complement.
>
> The #(...) syntax is shorthand for (fn [...] ...), which introduces a
> new anonymous function. What you've written there is equivalent to
>
> (defn whitespace? [c]
> (Character/isWhitespace c))
>
> (take-while (complement whitespace?) "the quick")
>
> ... i.e., you've made a function that calls a Java static method on
> its input.
>
> > Could I do something like that
> > in my own code (not sure I'd want to, just curious what magic is at
> > work here)?
>
> In your Java code, implement IFn. That's the magic. In your Clojure
> code, just hand around functions.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---