Funcții anonime, cunoscute în mod obișnuit ca funcții lambda, sunt o parte integrantă a limbajelor de programare funcționale, cum ar fi Haskell. Spre deosebire de funcțiile tradiționale, funcțiile anonime nu au un nume. Ele sunt definite din mers și sunt utilizate de obicei atunci când o funcție este necesară o singură dată. Să ne aprofundăm într-o problemă care poate fi rezolvată eficient folosind funcții anonime.
Problema
Imaginați-vă că încercați să analizați o listă de cuvinte și că trebuie să manipulați datele statistic. Doriți să numărați aparițiile fiecărei lungimi de cuvânt din listă. Pentru a face codul mai succint și mai ușor de întreținut, decideți să utilizați funcții anonime.
Soluție cu funcții anonime
[pseudocode lang=”Haskell”]
import Data.List
importați date calificate. Harta ca hartă
wordLengthCount :: [String] -> Map.Map Int
wordLengthCount = Map.fromListWith (+) . harta (x -> (lungime x, 1))
[/pseudo cod]
Să despachetăm soluția, pas cu pas.
Explicația detaliată a codului
În prima linie, importăm bibliotecile necesare. „Data.List” oferă funcții de manipulare a listelor, în timp ce „Data.Map” ne oferă acces la un tip de date care poate fi folosit pentru a implementa o structură de date de hartă.
Funcția „wordLengthCount” preia o listă de cuvinte (șiruri) ca argument și returnează o hartă care conține numărul de apariții al fiecărui cuvânt.
În primul rând, folosim funcția map pentru a aplica funcția anonimă fiecărui cuvânt din listă. Funcția noastră anonimă, sau funcția lambda, este definită astfel:
[pseudocode lang=”Haskell”]
x -> (lungime x, 1)
[/pseudo cod]
Funcția lambda ia un cuvânt ca intrare ('x') și emite un tuplu – lungimea cuvântului și 1. După ce această operație este aplicată fiecărui cuvânt din listă, ajungem la o listă de tupluri.
Apoi, folosim funcția „Map.fromListWith”. Funcția „fromListWith” este o funcție utilă care preia o funcție binară și o listă de tupluri și creează o hartă.
Funcția binară este (+), care adună elementele secunde ale tuplurilor dacă primele lor elemente se potrivesc. Astfel, funcția preia lista noastră de tupluri, le grupează după lungimea cuvântului și adună elementele secunde ale tuplurilor – în esență numărând aparițiile fiecărei lungimi de cuvânt.
Biblioteci și funcții Haskell
În acest cod, am folosit destul de multe biblioteci și funcții Haskell. „Lista.Date” si „Hartă.Date” bibliotecile sunt esențiale pentru manipularea și structura datelor în Haskell. The 'Hartă' funcția a fost esențială în aplicarea funcției noastre anonime fiecărui element din lista noastră, reducând semnificativ complexitatea codului nostru.
Mai mult decât atât, 'fromListWith' funcția din „Data.Map” ne-a permis să ne grupăm eficient datele în funcție de lungimea cuvântului și să calculăm numărul total de apariții.
Puterea lui Haskell strălucește cu adevărat atunci când folosim toate aceste concepte împreună, demonstrând eficiența și expresivitatea limbajelor de programare funcționale.
În ceea ce privește moda, eleganța și simplitatea acestui cod anonim bazat pe funcții pot fi asemănate cu o tendință de modă minimalistă, unde less is more, iar fiecare piesă (sau funcție) trebuie să servească unui scop clar, concis. La fel ca liniile curate și estetica dezordonată în mod minimalist, funcțiile anonime din Haskell oferă cod succint, curat, care funcționează cu o eficiență și o eleganță de neegalat.