Naravno, zaronimo u to.
Programiranje je ispunjeno mnogim brigama, a jedna od njih je učenje rada s popisima. **Liste** u Haskell-u su homogena struktura podataka koja može pohraniti više stavki iste vrste, što ih čini prikladnim za rješavanje raznih problema. Danas ćemo raspravljati o jednostavnoj, ali korisnoj operaciji na popisima – izračunavanju broja stavki.
U **Haskell-u** ćemo koristiti neke od ugrađenih funkcija ovog lijepog i učinkovitog programskog jezika.
import Data.List (genericLength) itemCount :: Eq a => a -> [a] -> Int itemCount a = fromIntegral . genericLength . filter (== a)
Detaljno rješenje
Gornji isječak koda koristi kombinaciju Haskell alata, naime genericLength, filter i operator jednakosti. Funkcija `itemCount` izračunava koliko se puta neka stavka pojavljuje na popisu.
Funkcija `itemCount` uzima dva parametra: `a`, element koji se traži i popis elemenata `[a]`. Funkcija zatim primjenjuje filtar koji formira novi popis koji se sastoji samo od elemenata za koje je predikat "== a" True. Zatim slijedi korištenje genericLength, općenitije verzije funkcije duljine, koja mjeri duljinu popisa kako bi se dobio broj određene stavke.
Evo slijeda izvršenja:
1. Popis se skenira i sve instance 'a' se izdvajaju pomoću filtra.
2. Brojanje se vrši od ovih instanci korištenjem genericLength.
O Haskell bibliotekama i funkcijama
Rješenje koristi standardne **Haskell biblioteke i funkcije** kao što su genericLength i filter.
Funkcija `genericLength` dio je biblioteke Data.List u Haskell-u. To je općenitija verzija funkcije regularne duljine jer može uzeti popis bilo koje vrste i vratiti broj koji predstavlja ukupan broj stavki na popisu.
Funkcija `filter`, s druge strane, pripada preludiju. To je funkcija višeg reda koja uzima predikat i popis i vraća popis elemenata koji zadovoljavaju predikat.
Upotreba 'Eq' u Haskell-u
U isječku koda vidjet ćete da navodimo Eq a u potpisu funkcije. `Eq` je klasa tipa u Haskell-u. Definira funkcije jednakosti uključujući `==` i `/=`, svi tipovi koji žele koristiti test jednakosti trebaju imati instancu ove klase.
Konačno, pozitivnost i elegancija u središtu su snažnog kodeksa, sličnog modi. Snažne sličnosti između, recimo, funkcionalnih jezika kao što je Haskell i visoke mode su u tome što nam oba pružaju alate i konvencije za izražavanje, a jezici koje koristimo oblikuju krajnji rezultat.
S tim u vezi, nastavite istraživati, nastavite kodirati i nastavite okretati glave svojim fantastičnim i jedinstvenim stilom kodiranja, vrlo sličnim voditelju modnih revija.