En ocasiones me tomo un tiempo para jugar con Scala, cuya combinación de características me atrae a pesar de la incapacidad de usarlo en mi propio trabajo (hasta ahora). Para las patadas, decidí probar los primeros 99 Haskell Problems de la manera más genérica posible, operando y devolviendo cualquier clase de colección aplicable. Las primeras preguntas no fueron demasiado difíciles, pero me encuentro totalmente bloqueado por flatten
. Simplemente no puedo entender cómo escribir tal cosa.¿Forma genérica y segura para apilar colecciones anidadas arbitrariamente en Scala?
Para ser específico sobre mi pregunta: ¿es posible escribir una función de tipo seguro que aplana de forma arbitraria SeqLike
s? Así que, por ejemplo,
flatten(List(Array(List(1, 2, 3), List(4, 5, 6)), Array(List(7, 8, 9), List(10, 11, 12))))
volvería
List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12): List[Int]
? Tenga en cuenta que esta no es la misma pregunta que en los conjuntos de problemas de Haskell y Scala; Intento escribir una función que aplana listas no heterogéneas, sino más bien secuencias homogéneas pero anidadas.
Buscando en la web Encontré translation into Scala de esa pregunta, pero funciona y devuelve una Lista [Cualquiera]. ¿Estoy en lo correcto al decir que esto requeriría algún tipo de recursión de tipo? ¿O estoy haciendo que esto sea más difícil de lo que es?
'por favor haga su pregunta reverse' una por separado ASÍ pregunta, ya que no tiene nada que ver con la pregunta principal – dhg
Consulte aquí: http: // stackoverflow.com/questions/7213134/how-does-this-recursive-list-flattening-work – Debilski
Eso casi lo hace, excepto que no puedo arreglármelas para que sea genérico WRT el tipo de secuencia. –