For multiple calls to map, you can always do:

(->> things
    (map #(-> % wrangle pacify))
    (filter effable)
    (map #(aggravate % :bees :sharks))
    (reduce mapinate {})

but, as others have said, I'm not sure you can meaningfully compress that
if you have to decide between map, filter and reduce. Perhaps implement an
embeddable J to Clojure compiler, either as a macro reading in symbols or
as a function reading in a string? Not sure about the amount of effort
involved, though.


On 8 February 2014 15:18, t x <txrev...@gmail.com> wrote:

> I think the problem is as follows:
>
> map = 3 characters
> filter = 6 characters
>
> Given that we're doing clojure not apl, to specify the function we're
> mapping/filtering on, we have to do either:
>   #( ... %  ) = 5 characters off the bat
>   or provide the name of the function (atleast 1 english word)
>
> Thus, even if we reduced map to M and filter to F, it's very unlikely
> that we'll ever shorten anything by more than 50% (just given the # of
> characters required to specify the function that we are
> mapping/filtering on.)
>
>
> From this, it seems, unless we go the APL route and make the task of
> describing the filtering/mapping function itself very short, there's
> almost no gain in shortening map / filter.
>
>
> This isn't meant to be discouraging -- in fact, I'd love to see a way
> to mix APL + Clojure. :-) Often times, I'm looking at a multiline
> clojure expression and thinking: "this'd be a single line of APL."
>
> On Fri, Feb 7, 2014 at 8:03 PM, Mars0i <marsh...@logical.net> wrote:
> > Since a few of these higher order functions--map, filter, reduce,
> etc.--are
> > so common and useful, I wonder whether there could be sufficient benefit
> to
> > having some abbreviations for them.  I know that some of these characters
> > are already taken, but just to sketch the idea:
> >
> > (--> things  %wrangle  %pacify  |effable  %#(aggravate % :bees :sharks)
> > \(mapinate {}) )
> >
> > In one sense this reduces the visual complexity of Korny's example.  In
> > another sense it increases it.  I thought this option was worth
> mentioning,
> > but I don't think I like it.  It makes the syntax closer to line noise,
> and
> > if there are too many magical characters, no one will remember what they
> > mean except the people who use them all of the time (like some of the
> > options in Perl regexps).  Why not go all the way, and provide an
> alternate
> > APL-style syntax for Clojure?
> >
> >
> > On Friday, February 7, 2014 9:14:27 AM UTC-6, t x wrote:
> >>
> >> I think
> >>
> >> (->> things
> >>     (map wrangle)
> >>     (map pacify)
> >>     (filter effable)
> >>     (map #(aggravate % :bees :sharks))
> >>     (reduce mapinate {})
> >>
> >>
> >> is optimal for the following reason:
> >>
> >>
> >> If you're doing "map" and "map alone", i.e.
> >>
> >> (->> things
> >>   (map f1)
> >>   (map f2)
> >>   (map f3)
> >>   (map f4))
> >>
> >> then you can do:
> >>
> >> (map #(f4 (f3 (f2 (f1 %)))) things)
> >>
> >>
> >> Now, if you're not doing pure maps, i.e. maps + filters
> >>
> >> Then for each function call, from an information theoretic
> >> perspective, you have to, at the very least, specify:
> >>
> >>   (*) the function to be called
> >>   (*) whether it's a filter or a map
> >>
> >> in this case,
> >>
> >> what you initially have is optimal.
> >>
> >> On Fri, Feb 7, 2014 at 6:33 AM, Korny Sietsma <ko...@sietsma.com>
> wrote:
> >> > I tend to agree, I think.  I certainly can't think of a syntax that
> >> > would
> >> > make me happy.  It just feels like a bit of a smell that I keep using
> >> > ->> to
> >> > process sequences in similar ways.
> >> >
> >> > The data.zip "xml->" macro is an example of something like what I'm
> >> > thinking
> >> > about - it lets you process sequences of xml data nicely:
> >> > http://clojure.github.io/data.zip/#clojure.data.zip.xml/xml->
> >> >
> >> > ... but I can't see a way to use something similar for the sort of
> data
> >> > I'm
> >> > processing.  I'll let this percolate, and stick to just using lots of
> >> > (map)
> >> > and (filter) instead.
> >> >
> >> > - Korny
> >> >
> >> >
> >> > On 6 February 2014 18:34, Jozef Wagner <jozef....@gmail.com> wrote:
> >> >>
> >> >> I agree with Colin, the cognitive load is greater than benefits of
> such
> >> >> approach. BTW you can use comp to chain consecutive map
> transformation
> >> >> functions. (map (comp pacify wrangle) things)
> >> >>
> >> >> JW
> >> >>
> >> >>
> >> >> On Thu, Feb 6, 2014 at 3:40 PM, Korny Sietsma <ko...@sietsma.com>
> >> >> wrote:
> >> >>>
> >> >>> Hi folks,
> >> >>>
> >> >>> I seem to regularly find myself writing ->> threaded code that
> follows
> >> >>> similar patterns:
> >> >>>
> >> >>> (->> things
> >> >>>     (map wrangle)
> >> >>>     (map pacify)
> >> >>>     (filter effable)
> >> >>>     (map #(aggravate % :bees :sharks))
> >> >>>     (reduce mapinate {})
> >> >>>
> >> >>> i.e. all stages of the code actually operate on a collection rather
> >> >>> than
> >> >>> a single value - usually with a call to "map" at each stage.  This
> >> >>> example
> >> >>> is over simplified - often many of the calls to map are inline
> >> >>> functions,
> >> >>> which makes this even more verbose.
> >> >>>
> >> >>> I wonder if there would be value in (yet another) variant on '->'
> that
> >> >>> assumes you are threading a collection and calling 'map' by default.
> >> >>> I'm
> >> >>> not sure of the syntax that would work though.  Something like:
> >> >>>
> >> >>> ([]-> things
> >> >>>         wrangle
> >> >>>         pacify
> >> >>>         [:filter effable]
> >> >>>         (aggravate :bees :sharks)
> >> >>>         [:reduce mapinate {}])
> >> >>>
> >> >>> I'm not sure about the syntax for non-map functions, I'm not even
> sure
> >> >>> if
> >> >>> this is worthwhile.  Thoughts?
> >> >>>
> >> >>> - Korny
> >> >>>
> >> >>> --
> >> >>> Kornelis Sietsma  korny at my surname dot com http://korny.info
> >> >>> .fnord { display: none !important; }
> >> >>>
> >> >>> --
> >> >>> You received this message because you are subscribed to the Google
> >> >>> Groups "Clojure" group.
> >> >>> To post to this group, send email to clo...@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+u...@googlegroups.com
> >> >>> For more options, visit this group at
> >> >>> http://groups.google.com/group/clojure?hl=en
> >> >>> ---
> >> >>> You received this message because you are subscribed to the Google
> >> >>> Groups
> >> >>> "Clojure" group.
> >> >>> To unsubscribe from this group and stop receiving emails from it,
> send
> >> >>> an
> >> >>> email to clojure+u...@googlegroups.com.
> >> >>> For more options, visit https://groups.google.com/groups/opt_out.
> >> >>
> >> >>
> >> >> --
> >> >> You received this message because you are subscribed to the Google
> >> >> Groups "Clojure" group.
> >> >> To post to this group, send email to clo...@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+u...@googlegroups.com
> >> >> For more options, visit this group at
> >> >> http://groups.google.com/group/clojure?hl=en
> >> >> ---
> >> >> You received this message because you are subscribed to the Google
> >> >> Groups
> >> >> "Clojure" group.
> >> >> To unsubscribe from this group and stop receiving emails from it,
> send
> >> >> an
> >> >> email to clojure+u...@googlegroups.com.
> >> >> For more options, visit https://groups.google.com/groups/opt_out.
> >> >
> >> >
> >> >
> >> >
> >> > --
> >> > Kornelis Sietsma  korny at my surname dot com http://korny.info
> >> > .fnord { display: none !important; }
> >> >
> >> > --
> >> > You received this message because you are subscribed to the Google
> >> > Groups "Clojure" group.
> >> > To post to this group, send email to clo...@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+u...@googlegroups.com
> >> > For more options, visit this group at
> >> > http://groups.google.com/group/clojure?hl=en
> >> > ---
> >> > You received this message because you are subscribed to the Google
> >> > Groups
> >> > "Clojure" group.
> >> > To unsubscribe from this group and stop receiving emails from it, send
> >> > an
> >> > email to clojure+u...@googlegroups.com.
> >> > For more options, visit https://groups.google.com/groups/opt_out.
> >
> > --
> > 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
> > ---
> > You received this message because you are subscribed to the Google Groups
> > "Clojure" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to clojure+unsubscr...@googlegroups.com.
> > For more options, visit https://groups.google.com/groups/opt_out.
>
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to