Dark Mode

Przejdz do zawartosci

Haskell

Z Wikipedii, wolnej encyklopedii
Ten artykul dotyczy jezyka programowania. Zobacz tez: inne znaczenia tego slowa.
Haskell

Logo jezyka
Pojawienie sie

1990[1]

Paradygmat

funkcyjny

Typowanie

statyczne, silne, inferencja typow

Implementacje

Glasgow Haskell Compiler

Aktualna wersja stabilna

Haskell 9.12.1[2]

Tworca

Lennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, John Hughes, Thomas Johnsson, Mark Jones, Simon Peyton Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, Philip Wadler

Platforma sprzetowa

wieloplatformowy

Strona internetowa

Haskell - czysto funkcyjny jezyk programowania nazwany na czesc amerykanskiego matematyka, Haskella Curry'ego.

Jego specyficzne cechy to m.in.:

Rozszerzenia

[edytuj | edytuj kod]

Pliki Haskella maja rozszerzenie

Kompilator

[edytuj | edytuj kod]

Haskell byl poczatkowo intensywnie rozwijany wokol osrodka University of Glasgow, popularny kompilator tego jezyka to Glasgow Haskell Compiler (GHC) kompilujacy szybki kod maszynowy porownywalny w szybkosci wykonania do kodow z GCC (ok. 1,3 razy wolniejszy niz C)[potrzebny przypis].

Przyklady

[edytuj | edytuj kod]
-- Komentarz w jednej linijce
{- Komentarze na
wiele linijek
{- mozna zagniezdzac -}
-}

-- Przyklady funkcji z dopasowywaniem wzorca
silnia 0 = 1
silnia n = n*silnia(n-1)

silnia n = product [1..n]

fib 0 = 0
fib 1 = 1
fib n = fib(n-1) + fib(n-2)

ack(0,y) = y+1
ack(x,0) = ack(x-1,1)
ack(x,y) = ack(x-1,ack(x,y-1))

-- przyklad uzycia straznikow
sign x | x > 0 = 1
| x == 0 = 0
| x < 0 = -1

myproduct [] = 1
myproduct (n:m) = n * myproduct m

mysum [] = 0
mysum (n:m) = n + mysum m

-- wyrazenia TreeOfMath maja postac: (Sub (Mult (Leaf 5) (Leaf 4)) (Add (Leaf 3) (Leaf 2)))
data TreeOfMath =
Mult TreeOfMath TreeOfMath |
Div TreeOfMath TreeOfMath |
Add TreeOfMath TreeOfMath |
Sub TreeOfMath TreeOfMath |
Leaf Float

compute (Mult x y) = compute x * compute y
compute (Div x y) = compute x / compute y
compute (Add x y) = compute x + compute y
compute (Sub x y) = compute x - compute y
compute (Leaf x) = x

showme (Mult x y) = "(" ++ showme x ++ "*" ++ showme y ++ ")"
showme (Div x y) = "(" ++ showme x ++ "/" ++ showme y ++ ")"
showme (Add x y) = "(" ++ showme x ++ "+" ++ showme y ++ ")"
showme (Sub x y) = "(" ++ showme x ++ "-" ++ showme y ++ ")"
showme (Leaf x) = show x

qsort [] = []
qsort (x:xs) = qsort less ++ x:(qsort more)
where less = [ a | a <- xs, a < x ]
more = [ a | a <- xs, a >= x ]

-- lista liczb pierwszych
primes = map head $ iterate (\(x:xs) -> [ y | y<-xs, y 'mod' x /= 0 ]) [2..]

-- lista liczb Fibonacciego
listFib = 1:1:(zipWith (+) listFib (tail listFib))

Przypisy

[edytuj | edytuj kod]
  1. | Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler: A History of Haskell: Being Lazy with Class. 2007. ISBN 978-1-59593-766-7.
  2. | Download -- The Glasgow Haskell Compiler [online], www.haskell.org [dostep 2025-01-24] .

Linki zewnetrzne

[edytuj | edytuj kod]
Zobacz publikacje
Haskell w Wikibooks
1GL
2GL/
Jezyk drugiej generacji/
Asembler
3GL /
Jezyk trzeciej generacji
wieloparadygmatowe
proceduralne
i strukturalne
historyczne
inne
obiektowe
funkcyjne
edukacyjne
4GL/
Jezyk czwartej generacji/
Jezyk dziedzinowy
Jezyki zapytan do baz danych
Generatory raportow / stron
Przetwarzanie danych, analiza i raportowanie
5GL/Logiczne
Ezoteryczne
Inne