Jestem nowy w Scala, właśnie zacząłem się uczyć, więc to jest podstawowe pytanie dla początkujących.Jak utworzyć listę z zakresu
Próbuję wprowadzić algorytm Sieve of Eratosthenes. Oto co mam do tej pory:
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))
Wynikiem jest:
List(2)
O ile mi zrozumieć, case _ => cross :: Nil
jest dopasowany w pierwszej iteracji sieve_core
, co oznacza, że crossed
nie jest instancją lista.
Zmieniłem lst
parametrów typu do List[Int]
a teraz kod nie zostanie skompilowany z błędem:
(fragment of Problem3.scala):24: error: type mismatch; found : Range.Inclusive required: List[Int] sieve_core(2, (2 to max)) ^
Range
Najwyraźniej nie jest List
.
Pytanie: w jaki sposób mogę zmienić zakres na listę? Czy jest to jakiś większy problem z moim kodem? Zrobiłem jakieś złe założenie gdzieś po drodze?
Każda pomoc doceniona.
Sprawdziłem listę klas apidocs, nie sprawdziłem Lista obiektów docs. Teraz wiem lepiej. Dzięki. –
Wiesz, to bardzo denerwujące, że nie są w żaden sposób powiązane ze sobą ani nawet połączone w jedną stronę :) –
To ma być przestarzałe, jak mi powiedziano. "2 do max toList" zadziała. –