Tengo un conjunto de elementos de algún tipo y deseo generar su conjunto de energía.Cómo generar el conjunto de potencia de un conjunto en Scala
He buscado en la web y no he podido encontrar ningún código de Scala que aborde esta tarea específica.
Esto es lo que se me ocurrió. Le permite restringir la cardinalidad de los conjuntos producidos por el parámetro de longitud.
def power[T](set: Set[T], length: Int) = {
var res = Set[Set[T]]()
res ++= set.map(Set(_))
for (i <- 1 until length)
res = res.map(x => set.map(x + _)).flatten
res
}
Esto no incluirá el conjunto vacío. Para lograr esto, deberá cambiar la última línea del método simplemente para res + Set()
¿Alguna sugerencia de cómo se puede lograr esto en un estilo más funcional?
Me encanta que - mi pregunta sería, ¿qué otra cosa es 'filterM' utiliza? –
@oxbow_lakes Puede, por ejemplo, hacer un filtro de predicado de tres vías. ('x => if ...' 'None' /' Some (false) '/' Some (true) '). Un solo 'None' borraría toda la entrada. Pero supongo que habrá usos mucho más avanzados con mónadas exóticas de las que nunca he oído hablar. – Debilski
Está incorporado por cierto: 'List (1, 2, 3) .powerset'. :) – Debilski