Riješeno: dobivanje broja stavki na popisu

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.

Povezani postovi:

Ostavite komentar