Anonyme funksjoner, vanligvis kjent som lambda-funksjoner, er en integrert del av funksjonelle programmeringsspråk som f.eks Haskell. I motsetning til tradisjonelle funksjoner, har ikke anonyme funksjoner et navn. De er definert på farten og brukes vanligvis når en funksjon bare er nødvendig én gang. La oss dykke ned i et problem som kan løses effektivt ved hjelp av anonyme funksjoner.
Problemet
Tenk deg at du prøver å analysere en liste med ord, og du må manipulere dataene statistisk. Du vil telle forekomstene av hver ordlengde i listen. For å gjøre koden din mer kortfattet og enklere å vedlikeholde, bestemmer du deg for å bruke anonyme funksjoner.
Løsning med anonyme funksjoner
[pseudocode lang="Haskell"]
importer Data.List
importer kvalifisert Data.Map som kart
wordLengthCount :: [String] -> Map.Map Int Int
wordLengthCount = Map.fromListWith (+) . kart (x -> (lengde x, 1))
[/pseudokode]
La oss pakke ut løsningen, trinn for trinn.
Detaljert forklaring av koden
I den første linjen importerer vi de nødvendige bibliotekene. 'Data.List' gir listemanipulasjonsfunksjoner, mens 'Data.Map' gir oss tilgang til en datatype som kan brukes til å implementere en kartdatastruktur.
Funksjonen 'wordLengthCount' tar inn en liste med ord (strenger) som argument, og returnerer et kart som inneholder antallet forekomster av hver ordlengde.
Først bruker vi kartfunksjonen til å bruke den anonyme funksjonen på hvert ord i listen. Vår anonyme funksjon, eller lambda-funksjon, er definert som:
[pseudocode lang="Haskell"]
x -> (lengde x, 1)
[/pseudokode]
Lambda-funksjonen tar et ord som input ('x'), og sender ut en tuppel – lengden på ordet og 1. Etter at denne operasjonen er brukt på hvert ord i listen, ender vi opp med en liste med tupler.
Deretter bruker vi 'Map.fromListWith'-funksjonen. 'fromListWith'-funksjonen er en hendig funksjon som tar en binær funksjon og en liste over tupler, og lager et kart.
Den binære funksjonen er (+), som legger sammen de andre elementene i tuplene hvis de første elementene samsvarer. Dermed tar funksjonen vår liste over tupler, grupperer dem etter ordlengde og legger sammen de andre elementene i tuplene - i hovedsak teller forekomsten av hver ordlengde.
Haskell biblioteker og funksjoner
I denne koden utnyttet vi ganske mange Haskell-biblioteker og funksjoner. 'Data.List' og 'Data.Map' biblioteker er avgjørende for datamanipulering og struktur i Haskell. De 'kart' funksjon var medvirkende til å bruke vår anonyme funksjon på hvert element i listen vår, noe som reduserte kompleksiteten til koden vår betydelig.
Videre er det 'fromListWith' funksjonen fra 'Data.Map' tillot oss å effektivt gruppere dataene våre etter ordlengde og beregne det totale antallet forekomster.
Kraften til Haskell skinner virkelig når vi bruker alle disse konseptene sammen, og demonstrerer effektiviteten og uttrykksevnen til funksjonelle programmeringsspråk.
Når det gjelder mote, kan elegansen og enkelheten til denne anonyme funksjonsdrevne koden sammenlignes med en minimalistisk motetrend, der mindre er mer, og hver del (eller funksjon) må tjene et klart, konsist formål. I likhet med de rene linjene og den ryddige estetikken på minimalistisk måte, tilbyr anonyme funksjoner i Haskell en kortfattet, ren kode som yter med uovertruffen effektivitet og eleganse.