Gracias por el aporte. No podes darme un ejemplo o remitirme a algun lado
donde pueda ver como se responde a un do: mediante esta modadlidad que
señalas?
(Si, necesito todas la combinaciones pero solo una a la vez)
Muchas gracias a todo Smalltalking por la ayuda.
German
On Friday 28 February 2003 16:39, Alejandro F. Reimondo wrote:
> Hola,
>
> Disculpen la inocencia de mi comentario pero...
>
> Seguro necesitan tener todos los objetos
> que determinan los subconjuntos?
> Seguro?
> Para que?
> Necesitan tener todos los subconjuntos al mismo tiempo?
>
> Lo pregunto porque en caso de no ser así...
> Lo que pueden tener es un objeto polimorfico
> con el conjunto de resultados y que a medida
> que se necesitan se construyen...
>
> Es decir...
> si Uds va a pedir todos los subconjuntos
> para hacer algo como:
>
> aCollection allSubsets do: [:subSet| subSet xxxxx ]
>
> NO es necesario conocer todos los subsets
> al mismo tiempo!
> Lo único necesario es responder a #do:
> con cada subset.
>
> Esto se los comento porque muchas veces he visto
> que por una comodidad conceptual se comete
> el error de enviar mensajes para construir colecciones
> que casi nunca se recorren en su totalidad
> o cuyos elementos son obsoletos a medida
> que la colección se va usando/recorriendo.
>
> Como ven, no he aportado una nueva solución
> solo una pregunta... esperando pueda ser de utilidad.
>
> hasta pronto,
> Ale.
>
> ----- Original Message -----
> From: "German" <netquake@...>
> To: <smalltalking@...>
> Sent: Friday, February 28, 2003 11:51 AM
> Subject: Re: [objetos] Subconjuntos
>
> > Estos metodos permiten calcular rapidamente los subconjuntos de un
>
> conjunto
>
> > (en los metodos self es Set o subclase) (en VW). Asume que los elementos
>
> del
>
> > conjunto son ordenables. Sugerencias para optimizar este codigo son
> > bienvenidas.
> >
> > Saludos!
> >
> > German
> >
> >
> > parts
> > "returns subsets of the receiver"
> >
> > |retSet|
> >
> > retSet := self class new.
> > 1 to: self maxBits do:[:i| retSet add: (self bitPosition: i)].
> >
> > ^retSet
> >
> >
> >
> > maxBits
> > "return maximun binary combination of the receiver (see bitPosition:)"
> >
> > ^(2 raisedTo: self size)-1
> >
> >
> > bitPosition: aBinaryNumber
> > "returns the subset of the receiver mapped to aBinaryNumber"
> >
> > |sCol bin set|
> >
> > bin := aBinaryNumber.
> > set := self class new.
> > sCol := self asSortedCollection.
> > 1 to: self size do: [:i|
> > (bin lowBit = 1)
> > ifTrue:[set add: sCol removeLast.]
> > ifFalse:[sCol removeLast.].
> > bin := bin bitShift: -1.
> > ].
> >
> > ^set
> >
> > On Tuesday 25 February 2003 22:51, German Morales wrote:
> > > It seems that German wrote:
> > > > Hola lista!
> > >
> > > Hola,
> > >
> > > > Quisiera saber como hacer para obtener los subconjuntos (o conj. de
> > > > partes) de un conjunto (clase Set o derivada).
> > > >
> > > > Por ejemplo para:
> > > >
> > > > Set('A','B','C')
> > > >
> > > > obtener:
> > > >
> > > > Set('A','B','C')
> > > > Set('A','B')
> > > > Set('B','C')
> > > > Set('A','C')
> > > > Set('A')
> > > > Set('B')
> > > > Set('C')
> > >
> > > Yo quise hacer lo mismo hace poco, y lo unico que encontre es lo que te
> > > muestro mas abajo, pero realmente me parece poco elegante, asi que si
> > > alguien encuentra algo mejor, sera bienvenido.
> > >
> > > Aqui tenes el ejemplo que vos pedias:
> > >
> > > aSet _ Set with:'A' with:'B' with:'C'.
> > > anOrderedCollection _ aSet asOrderedCollection.
> > > allCombinations _ Bag new.
> > > 1
> > > to: anOrderedCollection size
> > > do: [:eachSize |
> > > anOrderedCollection
> > > combinations: eachSize
> > > atATimeDo: [:eachCombination |
> > > allCombinations add: eachCombination copy]].
> > >
> > >
> > > Y aqui varios detalles a tener en cuenta:
> > > -esto anda en Squeak, no se en el resto de los ST
> > > -primero hay que pasarlo a OrderedCollection porque el metodo a usar
>
> esta
>
> > > disponible en SequenceableCollection
> > > -para obtener las combinaciones de N elementos, hay que mandar el
>
> mensaje
>
> > > #combinations:atATimeDo:
> > > -esto entonces lo tenes que hacer desde 1 (('A'), ('B'), ('C')) hasta
> > > el size de tu collection ('A', 'B', 'C').
> > > -IMPORTANTE: fijate el copy del final. esto es porque el
> > > #combinations:atATimeDo: le pasa al bloque siempre la misma collection
> > > pero con distintos elementos, en lugar de una collection nueva cada
> > > vez. esta es la parte mas fea ;-)
> > > -cada elemento en el resultado es un Array, no un Set como vos
>
> pretendias
>
> > > -despues de todo se han visto cosas peores ;-)
> > >
> > > > Saludos a todos! (Gracias!)
> > >
> > > Saludos!
> > >
> > > > German
> > >
> > > Yoda (anotherGerman)
> > >
> > >
> > >
> > >
> > > Para retirarse del grupo,
> > > puede enviar un email a:
> > > smalltalking-unsubscribe@egroups.com
> > >
> > >
> > > Tu uso de Yahoo! Grupos está sujeto a las
> > > http://ar.docs.yahoo.com/info/utos.html
> >
> > Para retirarse del grupo,
> > puede enviar un email a:
> > smalltalking-unsubscribe@egroups.com
> >
> >
> > Tu uso de Yahoo! Grupos está sujeto a las
>
> http://ar.docs.yahoo.com/info/utos.html
>
>
>
>
> Para retirarse del grupo,
> puede enviar un email a:
> smalltalking-unsubscribe@egroups.com
>
>
> Tu uso de Yahoo! Grupos está sujeto a las
> http://ar.docs.yahoo.com/info/utos.html