Tratando de producir una lista de tuplas que muestren la multiplicidad de factores primos ... la idea es hacer coincidir cada entero en una lista ordenada con el primer valor en una tupla, usando el segundo valor para contar. Probablemente podría hacerlo más fácilmente con takeWhile
, pero meh. Por desgracia mi solución no compilará:¿Se requiere un identificador estable durante la coincidencia de patrones? (Scala)
def primeFactorMultiplicity (primeFactors: List[Int]) = {
primeFactors.foldRight (List[(Int, Int)]()) ((a, b) => (a, b) match {
case (_, Nil) => (a, 1) :: b
case (b.head._1, _) => (a, b.head._2 + 1) :: b.tail
case _ => (a, 1) :: b
})
}
Se dice "error: Identificador de estabilidad que requiere, pero b.head._1 encontró." Pero el cambio de la segunda línea case
a la siguiente funciona bien:
case (i, _) if (i == b.head._1) => (a, b.head._2 + 1) :: b.tail
¿Por qué es esto, y por qué no puede hacer frente al compilador si hay una solución tan simple?
Cheers, parece que no entendía cómo funcionaba la coincidencia de patrones. Probablemente debería leer un libro en Scala uno de estos días. –
@Luigi: le sugiero que empiece desde aquí http://www.artima.com/pins1ed/;) –