Я новичок в Scala, только начал изучать, так что это основной вопрос для начинающих.
Я пытаюсь реализовать алгоритм Сито Эратосфена . Вот что я получил до сих пор:
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))
Результат:
List(2)
Насколько я понимаю, case _ => cross :: Nil
сопоставляется в первой итерации sieve_core
, что означает, что crossed
не является экземпляром списка.
Я изменил тип параметров lst
на List[Int]
, и теперь код не будет компилироваться с ошибкой:
(fragment of Problem3.scala):24: error: type mismatch;
found : Range.Inclusive
required: List[Int]
sieve_core(2, (2 to max))
^
Видимо Range
это не List
.
Вопрос: как я могу превратить Range в список? Или это большая проблема с моим кодом, где-то по пути я сделал неверное предположение?
Любая помощь приветствуется.