trzeba utworzyć listę, w którym:Haskell, zdefiniuj nieskończoną listę, dodaj dane w locie i sortuj w tym samym czasie. W jaki sposób?
- 1 jest członkiem
- jeśli n jest członkiem tak 2n + 1 3n + 1
więc lista jest nieskończona i muszą być posortowane. Po załadowaniu do GHCi, poleceniem:
"take 10 theList"
będzie produkować:
[1,3,4,7,9,10,13,15,19,21]
Poniżej są moje kody:
theList = ([1] ++ concat [[(x*2+1),(x*3+1)]|x<-theList])
wydaje się działać z wyjątkiem, że to nie jest posortowana, to samo polecenie co powyżej powoduje:
[1,3,4,7,10,9,13,15,22,21]
Czy ktoś ma jakiś pomysł, aby to rozwiązać? Dzięki
Twoja funkcja 'allInOne' to właśnie [' concat'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:concat). Haskell ma wiele funkcji "wbudowanych", które można wyszukiwać według podpisu typu za pomocą [Hoogle] (http://www.haskell.org/hoogle/) (jest to jedno z narzędzi, dzięki którym Haskell jest niesamowity!), Np. 'allInOne' ma typ' [[a]] -> [a] 'i [pierwszy wynik] (http: //www.haskell.org/hoogle/? hoogle = \ [\ [a \] \] + - % 3E + \ [a \]) jest tym, którego szukasz. :) – huon
Istnieje ładne naturalne wdrożenie obejmujące _corecursion_. W pewnym sensie przypomina nieskończoną listę liczb Fibonacciego: 'fibs = 0: 1: zipWith (+) fibs (tail fibs)'. W jaki sposób rozszerzyłbyś listę, gdy masz już 'theList' o pewnym rozmiarze? – Vitus