Movatterモバイル変換


[0]ホーム

URL:


Spring til indhold
WikipediaDen frie encyklopædi
Søg

Haskell (programmeringssprog)

Fra Wikipedia, den frie encyklopædi

Haskell er navnet på etrentfunktionsprogrammeringssprog med en ikke-striks ("doven") semantik og stærke, statiske typer. Det er opkaldt efter logikerenHaskell Curry.

Historie

[redigér |rediger kildetekst]

Efter Research Software Ltd. i 1985 udviklede programmeringssprogetMiranda steg interessen for dovent evaluerede programmeringssprog. Til konferencenFunctional Programming Languages and Computer Architecture (FPCA) i 1987 iPortland, Oregon blev man enige om behovet for en komité til at varetage enåben standard for sådanne sprog. Komitéens formål skulle derfor være at sætte de eksisterende sprog sammen til ét sprog, hvis formål skulle være grundlaget for ny forskning i funktionsprogrammeringssprog.

Komitéens arbejde resulterede i 1990 iHaskell 1.0-standarden som senere blev opdateret med 1.1, 1.2, 1.3 og 1.4. I slutningen af 1997 blevHaskell 98-standarden udgivet med formålet at angive en stabil, minimal og portabel version af sproget, samt etstandardbibliotek til undervisningsbrug og videre udvidelse. Komitéen gav eksplicit udtryk for at skabelsen af nye udvidelser var velønskede.

I februar 1999 blev Haskell 98-standarden udgivet under navnetThe Haskell 98 Report. I januar 2003 udkom en revideret udgave under navnetHaskell 98 Language and Libraries: The Revised Report. Sproget er i stadig udvikling og den mest populærecompiler til sproget,Glasgow Haskell Compiler (GHC), er udgangspunktet for de fleste udvidelser såsom generaliserede, algebraiske datatyper og typefamilier.

Tidligt i 2006 påbegyndtes endnu en revision af standarden for sproget under navnetHaskell Prime med henblik på at udgive årlige revisioner. Den første årlige revision under dette initiativ varHaskell 2010 som blev annonceret i november 2009 og udgivet i juli 2010.

Egenskaber

[redigér |rediger kildetekst]

Haskell understøtter doven evaluering, mønstergenkendelse,list comprehension, typeklasser, typepolymorfi og typeinferens. Det er etrent funktionsprogrammeringssprog, hvilket betyder at funktioner generelt ikke har bivirkninger, og at de derfor modellerer sig tæt op af den matematiske definition for funktioner. En bivirkning skal forstås som en del af et programs resultat, som ikke alene fremgår af returværdien for en funktion (for eksempelI/O).

Haskell har et stærkt, statisk typesystem baseret på Hindley-Milner-typeinferens. Haskells primære innovation i denne retning er tilføjelsen af typeklasser, som oprindeligt var tiltænkt som en måde at tilføjeoverloading, men som sidenhen har fundet mange flere anvendelser.

Sproget har en åben standard og adskillige implementeringer eksisterer af denne.

Der eksisterer desuden et aktivt miljø omkring sproget og mere end 3600 tredjeparts-open source-moduler findes iHackage-pakkedepotet.


Eksempler

[redigér |rediger kildetekst]

Følgende erHello World-programmet skrevet i Haskell. Det er værd at bemærke at alle linjer foruden den sidste kan udelades, men i større programmer har en strukturerende betydning:

moduleMainwheremain::IO()main=putStrLn"Hello, World!"

Fakultetsfunktionen

[redigér |rediger kildetekst]

Følgende erfakultetsfunktionen skrevet på forskellige måder:

-- Typeannotering (valgfri):factorial::Integer->Integer-- Ved brug af rekursion og mønstergenkendelsefactorial0=1factorialn=n*factorial(n-1)-- Ved brug af rekursion uden mønsterkendelsefactorialn=ifn>0thenn*factorial(n-1)else1-- Ved at bruge en liste og en biblioteksfunktionfactorialn=product[1..n]-- Ved at bruge en liste og foldning (funktionsprogrammeringsbegreb)factorialn=foldl1(*)[1..n]-- Ved at bruge punktfri stil hvor argumentet til funktionen gøres implicitfactorial=foldr(*)1.enumFromTo1

Følgende er effektive implementeringer afFibonacci-tallene som uendelige lister:

-- Typeannotering (valgfri):fib::Int->Integer-- Med selv-refererende datafibn=fibs!!nwherefibs=0:scanl(+)1fibs-- 0,1,1,2,3,5,...-- Samme som ovenstående, uden brug af scanl-biblioteksfunktionenfibn=fibs!!nwherefibs=0:1:nextfibsnext(a:t@(b:_))=(a+b):nextt-- Lignende fremgangsmåde som anvender zipWith-biblioteksfunktionenfibn=fibs!!nwherefibs=0:1:zipWith(+)fibs(tailfibs)-- Ved at definere en generator-funktionfibn=fibs(0,1)!!nwherefibs(a,b)=a:fibs(b,a+b)

Typen "Int" hentyder til heltal med en størrelse begrænset af maskinens registre (brugt som et indeks ind i lister ved hjælp af!!-operatoren), mens "Integer" kan bruges for at opnå heltalsværdier af vilkårlig størrelse. For eksempel kan ovenstående kode anvendes til hurtigt at beregne det 10.000. Fibonacci-tal som et 2090-cifret tal


Se også

[redigér |rediger kildetekst]
Autoritetsdata
Hentet fra "https://da.wikipedia.org/w/index.php?title=Haskell_(programmeringssprog)&oldid=10327923"
Kategori:
Skjulte kategorier:

[8]ページ先頭

©2009-2026 Movatter.jp