Re: Alternative - macro for threading sequences?

2014-02-08 Thread t x
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
  

Re: Alternative - macro for threading sequences?

2014-02-08 Thread Korny Sietsma
Yeah - I'm coming to the conclusion that this idle thought didn't really
have any value. The discussion was interested though.
On 8 Feb 2014 17:30, Gary Verhaegen gary.verhae...@gmail.com wrote:

 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 

Re: Alternative - macro for threading sequences?

2014-02-07 Thread Korny Sietsma
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.wag...@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 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.




-- 
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 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.


Re: Alternative - macro for threading sequences?

2014-02-07 Thread t x
 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.wag...@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 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.




 --
 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 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

Re: Alternative - macro for threading sequences?

2014-02-07 Thread Mars0i
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 http://c2.com/cgi/wiki?AplLanguage 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.comjavascript: 
 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.comjavascript: 
 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.comjavascript: 
 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.comjavascript: 
  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 javascript: 
  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 javascript:. 
  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.comjavascript: 
  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 

Alternative - macro for threading sequences?

2014-02-06 Thread Korny Sietsma
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 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.


Re: Alternative - macro for threading sequences?

2014-02-06 Thread Colin Yates
To be honest I prefer the first although I get your point about the over 
simplification.

If I were going anywhere with this it would be to generalise it into a 
provided processor, something like:

(- :processor map
  things
  wrangle
  ...
)

but I am not sure the cognitive load of the extra syntax buys us much.

On Thursday, 6 February 2014 14:40:50 UTC, Korny 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 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.


Re: Alternative - macro for threading sequences?

2014-02-06 Thread Jozef Wagner
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 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.