On Dec 5, 2011, at 10:00 AM, Geoffrey S. Knauth wrote:

> I'm wondering if there is something in the now very rich set of Racket 
> libraries that already does this.  Let's say I have 5 points {A,B,C,D,E}.  I 
> want to interconnect all of them:
> 
> {AB,AC,AD,AE,AF,BC,BD,BE,BF,CD,CE,CF,DE,DF,EF}
> 
> That's 15 edges rather than the 5x5=25 that a dumb interconnect would do.

I presume you mean 6 points {A,B,C,D,E,F}, and 15 edges rather than the 6x6=36 
that a dumb interconnect would do.

As it happens, I ran into a similar problem in helping a student last week.  
He's working in Java, so he's probably out of luck :-)  Anyway, I had pointed 
out to him the Java "for-each" loop, he got the idea, and he wanted to loop 
over all the distinct 2-element subsets of a given list.  He had two nested 
for-loops with integer indices, and wanted to know if there was a slicker way.  
We concluded that Java for-each-loops by themselves don't do the job, but one 
could write a subsetsOfSize function and then say

for (Pair p : myList.subsetsOfSize(2)) { ... }

or in Racket
(for (p (subsets-of-size myList 2)) ...)

Of course, many scripting languages would allow you to extract the elements of 
p at the same time, e.g. Ruby
myList.subsetsOfSize(2).each { |x,y| ...}

which would take a bit of macro-wrangling in Racket.


Stephen Bloch
sbl...@adelphi.edu


_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to