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.

Reply via email to