I am not too sure if this is less than quadratic ??

(define points (list->vector '(a b c d e f)))
(define l (vector-length points))

(define (gen org start end)
  (for/list ([n (in-range start end )])
    (cons (vector-ref points org ) (vector-ref points n ))))

(for/fold ([accum empty]) ([i (in-range l)])
  (append accum (gen i (+ i 1) l)))


On Mon, Dec 5, 2011 at 9:10 PM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu> wrote:
> On Mon, Dec 5, 2011 at 10:00 AM, Geoffrey S. Knauth <ge...@knauth.org> 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.  
>> To start, I just need to track and sort the edge weights, and AB is the same 
>> as BA.
>
> Here's the start of an answer (sadly quadratic, but for N=121 I don't
> think that will matter much):
>
> #lang racket
> (require unstable/sequence)
> (define (subsets-of-size-2 l)
>  (for*/lists (r) ([i l] [j l]
>                   #:unless (eq? i j)
>                   #:unless (member (cons j i) r))
>    (cons i j)))
>
> (for ([(p q) (in-pairs (subsets-of-size-2 '(A B C D E F)))])
>  (printf "~a <-> ~a\n" p q))
>
> --
> sam th
> sa...@ccs.neu.edu
>
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/users

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

Reply via email to