Haskell (programovací jazyk)

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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. +more Mezi další vlastnosti 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.

Historie

Jazyk byl navržen na konci 80. let +more_století'>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ě. Poslední 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í. Plánované zařazení některých rozšíření je pojmenováno jako Haskell′ (Haskell Prime).

Historie v širším pojetí

Historie tohoto jazyka sahá až do září roku 1987. Tehdy se konala konference o funkcionálním programování ve státě Oregon. +more První verze tohoto jazyka byla oznámena až v roce 1990 (version 1. 0). Další přišly v srpnu 1991 (version 1. 1), v květnu 1992 (version 1. 2), v květnu 1996 (version 1. 3) a v dubnu 1997 (version1. 4). V roce 1994 registroval John Peterson internetovou doménu haskell. org. Za vrchol je považován Haskell 98, což je také jeho poslední oficiální verze. Je čistě funkcionální na rozdíl od Scheme a je určený pro výzkum.

Jméno nese podle amerického logika (matematika), který se jmenoval Haskell Brooks Curry. Narodil se ve státě Massachusetts 12. +more září 1900 a zemřel 1. září 1982 ve státě Pennsylvania, USA. Tento americký matematik studoval ve dvacátých letech dvacátého století na Harvardu. Zabýval se kombinační logikou a dal základy k funkcionálnímu programování. Proto nese také jeho název. V letech 1944-1945 pracoval v laboratořích na Johns Hopkins University. Začal se zabývat ENIAC (Electronic Numerical Integrator and Computer) - předchůdcem dnešních počítačů. V roce 1946 o tom napsal studie týkající se interpolací. V roce 1966 přijímá pozici profesora logiky v Amsterdamu. Zde stráví čtyři roky a poté se vrací na State College, kde také později umírá.

Datové typy

Čísla

Čísla se v Haskellu dají reprezentovat mnoha datovými typy. Mezi základní patří: * Int - celé číslo omezeného rozsahu (minimálně -2^29 . +more 2^29-1) * Word - celé číslo bez znaménka se stejnou velikostí jako Int * Integer - celé číslo neomezeného rozsahu * Double a Float - čísla s plovoucí desetinnou čárkou (dvojitá resp. jednoduchá přesnost) * Ratio a - racionální číslo s čitatelem a jmenovatelem celočíselného typu a.

Znaky

Pro reprezentaci znaků se používá typ Char, který umožňuje ukládat znaky Unicode.

Booleany

K ukládání pravdivostních hodnot slouží typ Bool, který může nabývat dvou hodnot: True a False.

Seznamy

Seznamy jsou v Haskellu nejčastěji používaným složeným datovým typem. Jsou homogenní, což znamená, že mohou obsahovat hodnoty pouze jednoho datového typu (např. +more celé číslo Int, pravdivostní hodnota Bool, nebo další seznam). Seznamy se zapisují do hranatých závorek a hodnoty se oddělují čárkou:.

[0,2,4,6] ['s', 't', 'r', 'i', 'n', 'g'] [True,False,True,False] []

Je možno použít ekvivalentní zápis:

(0:2:4:6:[])

Pokud je potřeba seznam hodnot z určitého rozsahu, je možno použít tento zápis:

[1..5] -- ekvivalentní [1,2,3,4,5] ['a'..'g'] -- ekvivalentní "abcdefg" [2,4..12] -- ekvivalentní [2,4,6,8,10,12] [9,6..(-12)] -- ekvivalentní [9,6,3,0,-3,-6,-9,-12]

Haskell rovněž umožňuje použití nekonečných seznamů:

[1..] -- všechna přirozená čísla (1,2,3,4,5,6...) [1,3..] -- lichá kladná čísla (1,3,5,7...) [10,9..] -- 10,9,8,7,6,5,4...

Pro zápis řetězců se využívá syntaktický cukr:

"string" "řekl \"ahoj\"" -- ['ř', 'e', 'k', 'l', ' ', '"', 'a', 'h', 'o', 'j', '"']

Funkce pro práci se seznamy

Pro práci se seznamy v Haskellu je možno použít velké množství funkcí. Mezi nejužívanější lze zařadit: * map f list aplikuje funkci f na každý prvek seznamu list * filter f list vrací seznam všech prvků seznamu list, pro které funkce f vrátila True * head list získá první prvek seznamu * tail list vezme první prvek seznamu a vrátí zbytek * init list vrátí všechny prvky seznamu kromě posledního * length list spočítá délku seznamu * reverse list vrátí prvky seznamu list v opačném pořadí * minimum list získá nejmenší hodnotu ze seznamu * maximum list získá nejvyšší hodnotu ze seznamu * drop n list zahodí prvních n prvků a vrátí zbytek * take n list vrátí seznam prvních n prvků

N-tice (tuples)

N-tice v Haskellu ukládají několik hodnot různých typů. Zapisují se do závorek a prvky se oddělují čárkou:

(2, "dva") -- dvojice, typ (Int, String) ("wow", False, [1,2]) -- trojice, typ (String, Bool, [Int])

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

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

qsort [] = [] qsort (pivot:tail) = qsort left ++ [pivot] ++ qsort right where left = [y | y = pivot]

Implementace

Následující implementace zcela (nebo téměř zcela) vyhovují standardu Haskell 98 a jsou distribuovány pod open source licencí. * Glasgow Haskell Compiler (GHC) 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. +more * Hugs 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. * nhc98 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.

Literatura

THOMPSON, S. Haskell The Craft of Functional Programming. Addison-Wesley 487 s.

Reference

Externí odkazy

[url=http://www. haskell. +moreorg]Domovská stránka Haskellu[/url] * [url=http://haskell. cz/]Haskell. cz[/url] - o Haskellu v češtině * [url=http://naucte-se. haskell. cz]Naucte-se. Haskell. cz[/url] On-line kniha o programování v Haskellu v češtině * [url=http://www. root. cz/serialy/haskell-a-funkcionalni-programovani/]Seriál Haskell a funkcionální programování[/url].

Kategorie:Programovací jazyky Kategorie:Funkcionální jazyky

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top