Soy nuevo en Scala, recién comencé a aprender, así que esta es una pregunta básica para principiantes.Cómo crear una lista desde el rango
Intento implementar el algoritmo Sieve of Eratosthenes. Esto es lo que tengo hasta ahora:
def sieve_core(cross: Int, lst: Seq[Int]): List[Int] = { val crossed = lst.filter(_ % cross != 0) crossed match { case a :: rest => cross :: sieve_core(a, crossed) case _ => cross :: Nil } } def sieve(max: Int): List[Int] = { sieve_core(2, (2 to max)) } println(sieve(100))
El resultado es:
List(2)
Por lo que yo entiendo, case _ => cross :: Nil
se corresponde en la primera iteración de sieve_core
, lo que significa que crossed
no es una instancia de una lista.
que cambió el tipo de parámetros a lst
List[Int]
y ahora el código no se compilará con un error:
(fragment of Problem3.scala):24: error: type mismatch; found : Range.Inclusive required: List[Int] sieve_core(2, (2 to max)) ^
Al parecer Range
no es un List
.
Pregunta: ¿cómo puedo convertir Range en una lista? ¿O es un problema mayor con mi código, he hecho algunas suposiciones erróneas en algún punto del camino?
Cualquier ayuda apreciada.
Comprobé la clase de lista apidocs, no he comprobado los documentos del objeto Lista. Ahora sé mejor. Gracias. –
Ya sabes, es súper molesto cómo no están prominentemente vinculados entre sí, o incluso combinados en una sola página :) –
Esto se supone que está en desuso, según me dijeron. '2 to max toList' funcionará. –