2009-09-11 11 views
11

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 lstList[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.

Respuesta

28

Hay un método en el objeto applyList compañero que tiene un rango y devuelve un List:

scala> List.range(2, 11) 
res0: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 10) 

Hay un montón de útiles List métodos de fábrica in the List collection documentation.

+0

Comprobé la clase de lista apidocs, no he comprobado los documentos del objeto Lista. Ahora sé mejor. Gracias. –

+2

Ya sabes, es súper molesto cómo no están prominentemente vinculados entre sí, o incluso combinados en una sola página :) –

+2

Esto se supone que está en desuso, según me dijeron. '2 to max toList' funcionará. –

7

para convertir cualquier secuencia de s en una lista, utilice s.toList

Estoy seguro digitalross' es más eficiente en este caso, sin embargo.

+0

En realidad, este parece ser The Scala Way +1 – DigitalRoss

Cuestiones relacionadas