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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 [email protected]
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> 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 [email protected].
>>> 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 [email protected]
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected]
>> 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 [email protected].
>> 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 [email protected]
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected].
> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.