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.