Linux E X P R E S

Facebook

Haskell

Společníkem ve světě programovacích jazyků je vám Lukáš Faltýnek .


Čistě funkcionální jazyk Haskell můžeme v současnosti považovat za standard v oblasti funkcionálního programování. Za vznikem tohoto jazyka stojí zvláštní kolegium ustanovené v druhé polovině osmdesátých let dvacátého století, jehož snahou bylo vytvořit standardní funkcionální jazyk, který by kromě nových věcí obsahoval to nejlepší z již existujících funkcionálních jazyků.

Při tvorbě Haskellu kolegium nejprve usilovalo vyjít z tehdy již plně funkcionálního jazyka Miranda, který byl vytvořen v letech 1985-1986 Davidem Turnerem, ale k tomuto se mu nedostalo svolení. Nakonec se tedy jako základ pro Haskell použil jazyk ML vytvořený na základě prací Robina Milnera. V jazyce Haskell tedy najdeme mnoho podobností s jazykem ML.

Na počest amerického matematika Haskella Brookse Curryho (1900-1982) pak bylo pro jazyk zvoleno jméno Haskell. Curryho práce směřovaly především do oblasti kombinatorické logiky jako variace lambda kalkulu a v mnohém pak sloužily jako podklad pro funkcionální jazyky. Jazyk Haskell je na matematické teorii lambda kalkulu založen.

Zvláštností Haskellu je zápis zdrojového kódu, kdy není nutné uvádět speciální znak (např. středník, složené závorky), který ukončuje výraz nebo blok kódu. U Haskellu je toto možno řídit formátováním, a to podle pravidla, že kód patřící do jednoho bloku má stejné odsazení od začátku řádky.

Pro ty, kterým zůstává pojem lambda kalkul neznámý, si jen ve stručnosti řekněme, že jde o teorii funkcí, která byla vytvořena americkým matematikem Alonzem Churchem (1903-1995) v roce 1936. Tato teorie je pak založena na jednoduchém jazyce, jehož prvky jsou proměnná, aplikace a abstrakce. Proměnná reprezentuje blíže nespecifikovanou hodnotu. Aplikace představuje volání funkce s jedním argumentem. Funkce v lambda kalkulu jsou reprezentovány ve formě abstrakce tvořené proměnnou označující parametr a tělem ve tvaru lambda výrazu. Více se můžete dozvědět z uvedených odkazů níže.

Další zajímavostí je možnost psaní kódu dvěma způsoby, a to podle toho, jak v kódu nahlížíme na komentáře. V prvém způsobu jsou explicitně vyznačeny komentáře. Jednořádkový komentář znaky -- a víceřádkový pak znaky {}.
U druhého způsobu se naopak explicitně zvýrazňuje kód, a to znakem >. Vše ostatní je pak chápáno jako komentář. Tento druhý způsob zápisu kódu se nazývá literární programování (literate programming), protože se v kódu objevuje více komentářů (formálního popisu), než vlastního programování.

První verze Haskellu 1.0. byla definována v roce 1990. Poslední oficiální stabilní verze jazyka je Haskell 98.

Interpretrů jazyka Haskell je k volnému použití hned několik. Jako představitele nejznámějšího překladače si zde uvedeme Hugs 98, který je napsaný v jazyce C, a tak je dostupný pro velké množství operačních systémů. Taktéž je můžeme nalézt jako součást linuxových distribucí. Hugs 98 plně podporuje specifikaci Haskell 98. Další rozšířené překladače, s kterými se můžeme setkat, jsou například NHC 98 a GHC (Glasgow Haskell Compiler).

Jak jsme si již řekli, Haskell je čistě funkcionální jazyk, a tak se všechny výpočty provádějí vyhodnocováním výrazů na hodnoty. S každou hodnotou je svázán její typ. Mezi základní datové typy patří Int, Integer, Char, Bool a Float. Z existujících typů pak můžeme odvodit typy vlastní. String můžeme například definovat jako seznam znaků (type String = [char]). Haskell taktéž obsahuje i polymorfní typy.

Funkce se v Haskellu definují posloupností rovnic. Využívá se přitom tzv. unifikace vzorů (pattern matching). Můžeme si to přiblížit tak, že se při vyhodnocování funkce se použije právě ta rovnice, jejíž vzor odpovídá daným parametrům.

Stejně jako v LISPu se i v Haskellu setkáme v hojné míře se seznamy. Seznam je v Haskellu kolekce hodnot téhož datového typu. Pořadí prvků v seznamu je významné. Stejně tak i počet výskytů jednotlivých hodnot.

Ukázka programu Hello, World!:  module Hello where  hello::String  hello = "Hello World!" 
Ukázka programu Fibonacciho řada:  module Main where  fibs = 1 : 1 : zipWith (+) fibs (tail fibs)  main = print $ take 20 fibs 

Praktické využití Haskellu je taktéž široké. Jak se na domovských stránkách Haskellu můžeme dočíst, pokrývá mnoho oblastí. Rozsáhlé průmyslové aplikace, vývojové nástroje, matematické programy, nástroje pro analýzu, webové nástroje a databázové systémy. Další uplatnění Haskellu je možné nalézt při výuce funkcionálních jazyků.

Diskuze (2) Nahoru