Haskell

Z Multimediaexpo.cz

(Rozdíly mezi verzemi)

Verze z 21. 10. 2010, 17:20

Haskell je standardizovaný funkcionální programovací jazyk používající líné vyhodnocování, pojmenovaný na počest logika Haskella Curryho. Jazyk se rychle vyvíjí, především díky svým implementacím Hugs a GHC.

Haskell je jazyk dodržující referenční transparentnost. To, zjednodušeně řečeno, znamená, že tentýž (pod)výraz má na jakémkoliv místě v programu stejnou hodnotu. Mezi další výhody tohoto jazyka patří přísné typování proměnných, které programátorovi může usnadnit odhalování chyb v programu. Haskell plně podporuje práci se soubory i standardními vstupy a výstupy, která je ale poměrně složitá kvůli zachování referenční transparentnosti. Jako takový se Haskell hodí hlavně pro algoritmicky náročné úlohy minimalizující interakci s uživatelem.

Obsah

Historie

Jazyk byl navržen na konci 80. let 20. století skupinou vědců, kteří se snažili vytvořit otevřený standard funkcionálního programovacího jazyka s moderními vlastnostmi. Dále byl v 90. letech 20. století rozvíjen, hlavně v akademické sféře (motto: „avoid success at all costs“, tedy „vyhnout se úspěchu za každou cenu“) a později začal být známější i mimo ni, částečně díky online komunitě.[1] Posledním ustálenou verzí je revize Haskell 98, jež definuje minimální a přenositelný standard jazyka využitelný k výuce nebo jako základ dalších rozšíření.[2] Plánované zařazení některých rozšíření je pojmenováno jako Haskell′ (Haskell Prime).[3]

Příklady

Definice funkce faktoriálu:

fac 0 = 1
fac n = n * fac (n - 1)

Jiná definice faktoriálu (používá funkci product ze standardní knihovny Haskellu):

fac n = product [1..n]

Naivní implementace funkce vracející n-tý prvek Fibonacciho posloupnosti:

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

Eratosthenovo síto - jednoduchá implementace algoritmu pro nalezení všech prvočísel:

primes = es [2 ..] where es (p:t) = p : es [ n | n<-t, n`mod`p/=0 ]

Elegantní zápis řadicího algoritmu quicksort:

qsort [] = []
qsort (pivot:tail) = 
  qsort left ++ [pivot] ++ qsort right
  where
    left = [y | y <- tail, y < pivot]
    right = [y | y <- tail, y >= pivot]

Implementace

Následující implementace zcela (nebo téměř zcela) vyhovují standardu Haskell 98 a jsou distribuovány pod open source licencí.

  • Hugs ([1]) je interpret mezikódu (bajtkódu). Nabízí rychlý překlad programů a snesitelnou rychlost spouštění. Je vhodný především pro výukové účely.
  • Glasgow Haskell Compiler (GHC, [2]). Glasgow Haskell Compiler umí překládat zdrojové kódy Haskellu do kódu závislého na architektuře počítače, případně do jazyka C.
  • nhc98 ([3]) je dalším interpretem využívajícím mezikód, běh programů je znatelně rychlejší než u Hugsu. Nhc98 se zaměřuje na hospodárnou správu paměti, a je tak ideální pro využití na starších počítačích.

Reference

  1. O historii Haskellu v knize Real World Haskell
  2. Haskell 98 revised report
  3. Haskell Prime

Externí odkazy