Naravno, hajde da uronimo u to.
Programiranje je ispunjeno mnogim brigama, a jedna od njih je učenje rada sa listama. **Liste** u Haskell-u su homogena struktura podataka koja može pohraniti više stavki istog tipa, što ih čini pogodnim za rješavanje raznih problema. Danas ćemo razgovarati o jednostavnoj, ali korisnoj operaciji na listama – izračunavanju broja stavke.
U **Haskell-u** ćemo koristiti neke od ugrađenih funkcionalnosti ovog lijepog i efikasnog programskog jezika.
import Data.List (genericLength) itemCount :: Eq a => a -> [a] -> Int itemCount a = fromIntegral . genericLength . filter (== a)
Rešenje u detaljima
Isječak koda iznad koristi kombinaciju Haskell alata, odnosno genericLength, filter i operator jednakosti. Funkcija `itemCount` izračunava koliko puta se stavka pojavljuje na listi.
Funkcija `itemCount` uzima dva parametra: `a`, element koji se traži i listu elemenata `[a]`. Funkcija tada primjenjuje filter koji formira novu listu koja se sastoji samo od elemenata za koje je predikat `== a` Tačan. Zatim slijedi korištenje genericLength, općenitije verzije funkcije dužine, koja mjeri dužinu liste da bi se dobio broj određene stavke.
Evo slijeda izvršenja:
1. Lista se skenira i sve instance 'a' se izdvajaju pomoću filtera.
2. Brojanje je napravljeno od ovih instanci koristeći genericLength.
O Haskell bibliotekama i funkcijama
Rješenje koristi standardne **Haskell biblioteke i funkcije** kao što su genericLength i filter.
Funkcija `genericLength` je dio biblioteke Data.List u Haskellu. To je generaliziranija verzija funkcije regularne dužine jer može uzeti listu bilo kojeg tipa i vratiti broj koji predstavlja ukupan broj stavki na listi.
Funkcija `filter`, s druge strane, pripada uvodu. To je funkcija višeg reda koja uzima predikat i listu i vraća listu elemenata koji zadovoljavaju predikat.
Upotreba 'Eq' u Haskell-u
U isječku koda, vidjet ćete da smo specificirali 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 su u srcu snažnog koda, sličnog modi. Snažne sličnosti između, recimo, funkcionalnih jezika kao što je Haskell, i visoke mode su u tome što nam obe pružaju alate i konvencije da se izrazimo, i da jezici koje koristimo oblikuju krajnji rezultat.
S tim u vezi, nastavite da istražujete, nastavite sa kodiranjem i nastavite da okrećete glave svojim fantastičnim i jedinstvenim stilom koda, koji je veoma sličan vrhuncu na modnoj pisti.