tôi phải xác định một danh sách trong đó:Haskell, xác định danh sách vô hạn, thêm dữ liệu khi đang di chuyển và sắp xếp cùng một lúc. Làm sao?
- 1 là thành viên
- nếu n là thành viên, vì vậy là 2n + 1 và 3n + 1
Vì vậy, danh sách là vô hạn và phải được sắp xếp. Khi nạp vào GHCi, lệnh:
"take 10 theList"
sẽ sản xuất:
[1,3,4,7,9,10,13,15,19,21]
Dưới đây là mã của tôi:
theList = ([1] ++ concat [[(x*2+1),(x*3+1)]|x<-theList])
Có vẻ như để làm việc trừ rằng nó không phải được sắp xếp, các cùng một lệnh như trên tạo ra:
[1,3,4,7,10,9,13,15,22,21]
Có ai có ý tưởng nào để phân loại nó không? Cảm ơn
Chức năng 'allInOne' của bạn chính xác là [' concat'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:concat). Haskell có nhiều chức năng "tích hợp sẵn" mà bạn có thể tìm kiếm bằng chữ ký loại bằng cách sử dụng [Hoogle] (http://www.haskell.org/hoogle/) (đây là một trong những công cụ làm cho Haskell tuyệt vời!), Ví dụ: 'allInOne' có loại' [[a]] -> [a] 'và [kết quả đầu tiên] (http: //www.haskell.org/hoogle/? hoogle = \ [\ [a \] \] + - % 3E + \ [a \]) là cái bạn đang tìm kiếm. :) – huon
Có một triển khai tự nhiên tốt đẹp liên quan đến _corecursion_. Theo cách nó giống với danh sách vô hạn các số Fibonacci: 'fibs = 0: 1: zipWith (+) fibs (tail fibs)'. Làm thế nào bạn sẽ mở rộng danh sách khi bạn đã có 'theList' của một số kích thước? – Vitus