私はScalaを初めて使うので、学習を始めたばかりなので、これは基本的な初心者の質問です。範囲からリストを作成するには
Sieve of Eratosthenesアルゴリズムを実装しようとしています。ここで私はこれまで得たものである:
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
はcrossed
がのインスタンスではないことを意味し、sieve_core
の最初の繰り返しに一致していますリスト。
List[Int]
に
lst
パラメータの種類を変更し、現在のコードは、エラーでコンパイルされません。
(fragment of Problem3.scala):24: error: type mismatch; found : Range.Inclusive required: List[Int] sieve_core(2, (2 to max)) ^
はどうやらRange
がList
ではありません。
質問:範囲をリストにするにはどうすればよいですか?それとも、私のコードで大きな問題になっているのですか?途中で何らかの悪い仮定をしましたか?
助けてください。
Listクラスapidocsをチェックしましたが、Listオブジェクトdocsをチェックしていません。今私はよく知っている。ありがとう。 –
あなたは知っている、それは彼らが目立ってお互いにリンクされていないか、または単一のページに結合されていない方法は非常に迷惑です:) –
これは廃止されるはずです、私は言われました。 '2 to max toList'が動作します。 –