Je suis nouveau à Scala, je viens de commencer à apprendre, donc c'est une question de base pour les débutants. J'essaie d'implémenter l'algorithme Sieve of Eratosthenes. Voici ce que je suis arrivé à ce jour:Comment créer une liste à partir de la plage
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))
Le résultat est:
List(2)
Pour autant que je comprends, case _ => cross :: Nil
est adaptée à la première itération de sieve_core
, ce qui signifie que crossed
n'est pas une instance de une liste.
j'ai changé le type lst
de paramètres à List[Int]
et maintenant le code ne compilera pas avec une erreur:
(fragment of Problem3.scala):24: error: type mismatch; found : Range.Inclusive required: List[Int] sieve_core(2, (2 to max)) ^
Apparemment Range
n'est pas un List
. Question: comment puis-je transformer Range en Liste? Ou est-ce un plus gros problème avec mon code, j'ai fait une mauvaise supposition quelque part le long du chemin?
Toute aide appréciée.
J'ai vérifié les classes apidocs, je n'ai pas vérifié les documents de l'objet List. Maintenant, je sais mieux. Merci. –
Vous savez, c'est super ennuyeux comment ils ne sont pas liés les uns aux autres, ou même combinés dans une seule page :) –
Ceci est censé être déprécié, on me dit. '2 to max toList' fonctionnera. –