Anonimne funkcije, opšte poznate kao lambda funkcije, sastavni su dio funkcionalnih programskih jezika kao što su Haskell. Za razliku od tradicionalnih funkcija, anonimne funkcije nemaju naziv. Definiraju se u hodu i obično se koriste kada je funkcija potrebna samo jednom. Zaronimo u problem koji se može efikasno riješiti korištenjem anonimnih funkcija.
Problem
Zamislite da pokušavate analizirati listu riječi i trebate statistički manipulirati podacima. Želite da prebrojite pojavljivanja svake dužine reči na listi. Da bi vaš kod bio sažetiji i lakši za održavanje, odlučite se za korištenje anonimnih funkcija.
Rješenje s anonimnim funkcijama
[pseudocode lang=”Haskell”]
import Data.List
uvoz kvalifikovanih podataka.Mapa kao mapa
wordLengthCount :: [String] -> Map.Map Int
wordLengthCount = Map.fromListWith (+) . mapa (x -> (dužina x, 1))
[/pseudokod]
Raspakiramo rješenje, korak po korak.
Detaljno objašnjenje koda
U prvom redu uvozimo potrebne biblioteke. 'Data.List' pruža funkcije manipulacije listom, dok nam 'Data.Map' daje pristup tipu podataka koji se može koristiti za implementaciju strukture podataka mape.
Funkcija 'wordLengthCount' uzima listu riječi (stringova) kao argument i vraća mapu koja sadrži broj pojavljivanja svake dužine riječi.
Prvo, koristimo funkciju mape da primijenimo anonimnu funkciju na svaku riječ na listi. Naša anonimna funkcija, ili lambda funkcija, definirana je kao:
[pseudocode lang=”Haskell”]
x -> (dužina x, 1)
[/pseudokod]
Lambda funkcija uzima riječ kao ulaz ('x') i daje torku – dužinu riječi i 1. Nakon što se ova operacija primjenjuje na svaku riječ na listi, na kraju ćemo dobiti listu torki.
Zatim koristimo funkciju 'Map.fromListWith'. Funkcija 'fromListWith' je zgodna funkcija koja uzima binarnu funkciju i listu torki te kreira mapu.
Binarna funkcija je (+), koja zbraja druge elemente torki ako se njihovi prvi elementi podudaraju. Dakle, funkcija uzima našu listu torki, grupiše ih po dužini riječi i zbraja druge elemente torki – u suštini brojeći pojavljivanja svake dužine riječi.
Haskell biblioteke i funkcije
U ovom kodu smo iskoristili dosta Haskell biblioteka i funkcija. 'Data.List' i 'Data.Map' biblioteke su neophodne za manipulaciju podacima i strukturu u Haskell-u. The 'mapa' funkcija je bila ključna u primjeni naše anonimne funkcije na svaku stavku na našoj listi, značajno smanjujući složenost našeg koda.
Osim toga, 'fromListWith' funkcija iz 'Data.Map' nam je omogućila da efikasno grupišemo naše podatke po dužini reči i izračunamo ukupan broj pojavljivanja.
Moć Haskell-a zaista blista kada koristimo sve ove koncepte zajedno, pokazujući efikasnost i izražajnost funkcionalnih programskih jezika.
Što se tiče mode, elegancija i jednostavnost ovog anonimnog koda vođenog funkcijama može se uporediti s minimalističkim modnim trendom, gdje je manje više, a svaki komad (ili funkcija) mora služiti jasnoj, sažetoj svrsi. Poput čistih linija i nenatrpane estetike na minimalistički način, anonimne funkcije u Haskell-u nude sažet, čist kod koji radi s neusporedivom efikasnošću i elegancijom.