Løst: anonym funktion

Sidste ændring: 09/11/2023

Anonyme funktioner, almindeligvis kendt som lambda-funktioner, er en integreret del af funktionelle programmeringssprog som f.eks Haskell. I modsætning til traditionelle funktioner har anonyme funktioner ikke et navn. De er defineret i farten og bruges typisk, når der kun er brug for en funktion én gang. Lad os dykke ned i et problem, der kan løses effektivt ved hjælp af anonyme funktioner.

Problemet

Forestil dig, at du prøver at analysere en liste med ord, og du skal statistisk manipulere dataene. Du vil tælle forekomsterne af hver ordlængde på listen. For at gøre din kode mere kortfattet og nemmere at vedligeholde, beslutter du dig for at bruge anonyme funktioner.

Løsning med anonyme funktioner

[pseudocode lang="Haskell"]
importer Data.List
importer kvalificeret Data.Map som kort

wordLengthCount :: [String] -> Map.Map Int. Int
wordLengthCount = Map.fromListWith (+) . kort (x -> (længde x, 1))
[/pseudokode]

Lad os pakke løsningen ud trin for trin.

Detaljeret forklaring af kodeksen

I den første linje importerer vi de nødvendige biblioteker. 'Data.List' giver listemanipulationsfunktioner, mens 'Data.Map' giver os adgang til en datatype, der kan bruges til at implementere en kortdatastruktur.

Funktionen 'wordLengthCount' tager en liste af ord (strenge) ind som argument og returnerer et kort, der indeholder antallet af forekomster af hver ordlængde.

For det første bruger vi kortfunktionen til at anvende den anonyme funktion på hvert ord på listen. Vores anonyme funktion eller lambda-funktion er defineret som:

[pseudocode lang="Haskell"]
x -> (længde x, 1)
[/pseudokode]

Lambda-funktionen tager et ord som input ('x'), og udsender en tupel – længden af ​​ordet og 1. Efter denne operation er anvendt på hvert ord i listen, ender vi med en liste over tupler.

Dernæst bruger vi 'Map.fromListWith'-funktionen. Funktionen 'fromListWith' er en praktisk funktion, der tager en binær funktion og en liste over tupler og opretter et kort.

Den binære funktion er (+), som lægger de andre elementer i tuplerne sammen, hvis deres første elementer matcher. Således tager funktionen vores liste over tupler, grupperer dem efter ordlængde og lægger de andre elementer i tupler sammen - i det væsentlige tæller forekomsten af ​​hver ordlængde.

Haskell biblioteker og funktioner

I denne kode udnyttede vi en hel del Haskell-biblioteker og funktioner. 'Data.List' og 'Data.Map' biblioteker er afgørende for datamanipulation og struktur i Haskell. Det 'kort' funktion var medvirkende til at anvende vores anonyme funktion på hvert element på vores liste, hvilket reducerede kompleksiteten af ​​vores kode markant.

Desuden er det 'fromListWith' funktion fra 'Data.Map' gav os mulighed for effektivt at gruppere vores data efter ordlængde og beregne det samlede antal forekomster.

Kraften i Haskell skinner virkelig, når vi bruger alle disse koncepter sammen og demonstrerer effektiviteten og udtryksevnen af ​​funktionelle programmeringssprog.

Med hensyn til mode kan elegancen og enkeltheden i denne anonyme funktionsdrevne kode sammenlignes med en minimalistisk modetrend, hvor less is more, og hvert stykke (eller funktion) skal tjene et klart, kortfattet formål. Ligesom de rene linjer og den overskuelige æstetik på minimalistisk vis, tilbyder anonyme funktioner i Haskell en kortfattet, ren kode, der yder med uovertruffen effektivitet og elegance.

Relaterede indlæg: