Przejdź do zawartości

Haskell

Z Wikipedii, wolnej encyklopedii
Haskell
Logo języka Haskell
Logo języka
Pojawienie się

1990[1]

Paradygmat

funkcyjny

Typowanie

statyczne, silne, inferencja typów

Implementacje

Glasgow Haskell Compiler

Aktualna wersja stabilna

Haskell 9.12.1[2]

Twórca

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 sprzętowa

wieloplatformowy

Strona internetowa

Haskell – czysto funkcyjny język programowania nazwany na cześć amerykańskiego matematyka, Haskella Curry’ego.

Jego specyficzne cechy to m.in.:

Rozszerzenia

[edytuj | edytuj kod]

Pliki Haskella mają rozszerzenie

Kompilator

[edytuj | edytuj kod]

Haskell był początkowo intensywnie rozwijany wokół ośrodka University of Glasgow, popularny kompilator tego języka to Glasgow Haskell Compiler (GHC) kompilujący szybki kod maszynowy porównywalny w szybkości wykonania do kodów z GCC (ok. 1,3 razy wolniejszy niż C)[potrzebny przypis].

Przykłady

[edytuj | edytuj kod]
-- Komentarz w jednej linijce
{- Komentarze na
wiele linijek 
  {- można zagnieżdżać -}
-}

-- Przykłady 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))

-- przykład użycia strażników
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

-- wyrażenia TreeOfMath mają postać: (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 [dostęp 2025-01-24].

Linki zewnętrzne

[edytuj | edytuj kod]