I am new to Scala, just started learning, so this is basic beginner question.
I try to implement Sieve of Eratosthenes algorithm. Here is what I got so far:
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))
The result is:
List(2)
As far as I understand, case _ => cross :: Nil is matched in first iteration of sieve_core, which means that crossed is not an instance of a List.
I changed lst parameters type to List[Int] and now the code won't compile with an error:
(fragment of Problem3.scala):24: error: type mismatch;
found : Range.Inclusive
required: List[Int]
sieve_core(2, (2 to max))
^
Apparently Range is not a List.
Question: how can I turn Range into a List? Or is it some bigger problem with my code, I have made some bad assumption somewhere along the way?
Any help appreciated.