🔄 Losowy artykuł
Szlaki górskie Pociągiem dookoła Polski Podróże kulinarne Hotele-unikaty świata Parkingi przy lotniskach Łowiska Europy Campingi dla kamperów Imprezy — atrakcje w Polsce Poradnik pilota drona Wydarzenia i bilety Promocje bankowe Kamery na żywo Oferty Centrum Podróży Koliber Triper.pl Trip.FazaFM.com — plany podróży

Haskell

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.

Cechy

Jego specyficzne cechy to m.in.:

Rozszerzenia

Pliki Haskella mają rozszerzenie

Kompilator

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

-- 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

  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

ℹ Źródło: artykuł „Haskell” w polskiej Wikipedii. Treść dostępna na licencji CC BY-SA 4.0; lista autorów w historii edycji. Wersja może się różnić od aktualnej na Wikipedii (kopia odświeżana okresowo).
💳 Revolut
Karta wielowalutowa do podróży — płacisz za granicą bez przewalutowań.
Odbierz kartę →
💰 ZEN.COM
Konta multiwalutowe i karty — płatności bez granic z poziomu aplikacji.
Sprawdź ZEN →
🌍 Wise
Przelewy za granicę po realnym kursie — bez ukrytych marż.
Wypróbuj Wise →
Linki polecające — obowiązują regulaminy usług.
FazaFM.com — radio i newsy Hrubek.pl — Hrubieszów blisko Ciebie Gorzkie Groszki — blog