Redigerer
Haskell
(avsnitt)
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
== Kode og syntaks == ===Eksempler – grunnleggende syntaks=== [[Hello World]] kan i Haskell skrives <syntaxhighlight lang="Haskell"> main :: IO () main = putStrLn "Hello, World!" </syntaxhighlight> eller bare (siden Haskell bruker [[implisitt typededuksjon]], dvs. selv evaluerer typer for argumenter og resultater) <syntaxhighlight lang="Haskell"> main = putStrLn "Hello, World!" </syntaxhighlight> I det siste eksempelet er ''deklarasjonen'' til funksjonen tatt bort. Funksjoner i Haskell kan bli definert først med navn og type separert med to kolon (''::''). Typedeklareringen viser hvilke typer argumenter en funksjon kan få passert, den siste typedeklareringen gjelder det som returneres av funksjonen; siste vil alltid være med. En funksjon som [[addering|legger sammen]] to tall se slik ut: <syntaxhighlight lang="Haskell"> add :: Integer -> Integer -> Integer add x y = x + y </syntaxhighlight> En funksjon kan aldri endre tilstander andre steder i koden (ingen bivirkninger), og må alltid returnere noe. Dette er ulikt mange imperative språk, der man kan kalle en funksjon for å gjøre endringer i parametrene gitt til funksjonen (f.eks. ved sortering av en array). === Mønstertrefning === En funksjon må ha minst én definisjon, dvs. man må angi hvilke operasjoner som skal gjøres ved kall på denne funksjonen. Det er mulig – og vanlig – å angi flere definisjoner dersom argumentene til en funksjon kan være av flere typer; dette er vanlig blant annet for å angi ulike tilfeller for rekursive kall. Denne funksjonaliteten kalles ''mønstertreffning'': Funksjonen analyserer innkommende argumenter mot et mønster som er spesifisert i funksjonsdeklareringen. En funksjon for å regne ut [[Fakultet (matematikk)|fakultet]] for et tall ([[Produkt (matematikk)|produktet]] av alle tall fra 1 til ''n'', der ''n'' er større eller lik enn 0 – 0! er definert til å være 1) kan se slik ut: <syntaxhighlight lang="Haskell"> fakultet :: Integer -> Integer fakultet 0 = 1 fakultet n | n > 0 = n * fakultet (n-1) </syntaxhighlight> Her ser man at funksjonen først sjekker om ''0'' blir passert til funksjonen, viser det seg å være sant returnerer den ''1'', hvis ikke fortsetter den videre til den treffer et mønster som passer. Et annet enkelt eksempel på mønstertreffing vil være følgende funksjon, der resultatet på funksjonen blir annerledes ut ifra hvilken bokstav funksjonen får passert. <syntaxhighlight lang="Haskell"> bokstavNavn :: Char -> String bokstavNavn 'a' = "Andreas" bokstavNavn 'b' = "Bodil" bokstavNavn 'c' = "Cato" </syntaxhighlight> Et litt mer avansert eksempel på mønstertreffing vil være 3 funksjoner som hver tar et generiske sett med 3 objekter. taNummerEn treffer første objektet i settet og binder den til variabelen ''x'', for så å returnere denne. taNummerTo treffer andre objektet og binder den til ''y'', taNummerTre treffer siste og tredje objektet og binder det til ''z'' og i likhet med første funksjon returnerer alle det objektet de treffer. <syntaxhighlight lang="Haskell"> taNummerEn :: (a, b, c) -> a taNummerEn (x, _, _) = x </syntaxhighlight> <syntaxhighlight lang="Haskell"> taNummerTo :: (a, b, c) -> b taNummerTo (_, y, _) = y </syntaxhighlight> <syntaxhighlight lang="Haskell"> taNummerTre :: (a, b, c) -> c taNummerTre (_, _, z) = z </syntaxhighlight>
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Denne siden er medlem av 2 skjulte kategorier:
Kategori:Artikler med offisielle lenker og uten kobling til Wikidata
Kategori:Artikler uten offisielle lenker fra Wikidata
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon