Tôi mới sử dụng Scala, chỉ mới bắt đầu học, vì vậy đây là câu hỏi cơ bản cho người mới bắt đầu.Cách tạo Danh sách từ Phạm vi
Tôi cố gắng triển khai thuật toán Sieve of Eratosthenes. Dưới đây là những gì tôi có cho đến nay:
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))
Kết quả là:
List(2)
Theo như tôi hiểu, case _ => cross :: Nil
là lần xuất hiện trong lần lặp đầu tiên của sieve_core
, có nghĩa là crossed
không phải là một thể hiện của một danh sách.
tôi đã thay đổi lst
tham số kiểu để List[Int]
và bây giờ là mã sẽ không biên dịch với một lỗi:
(fragment of Problem3.scala):24: error: type mismatch; found : Range.Inclusive required: List[Int] sieve_core(2, (2 to max)) ^
Rõ ràng Range
không phải là một List
.
Câu hỏi: làm cách nào để biến Phạm vi thành Danh sách? Hoặc là nó một số vấn đề lớn hơn với mã của tôi, tôi đã thực hiện một số giả định xấu một nơi nào đó trên đường đi?
Bất kỳ trợ giúp đánh giá cao.
Tôi đã kiểm tra Danh sách lớp apidocs, chưa chọn Danh sách tài liệu đối tượng. Bây giờ tôi biết rõ hơn. Cảm ơn. –
Bạn biết đấy, nó rất khó chịu làm sao chúng không được liên kết nổi bật với nhau, hoặc thậm chí kết hợp thành một trang duy nhất :) –
Điều này được cho là không được chấp nhận, tôi được bảo. '2 to max toList' sẽ hoạt động. –