přejít na obsah přejít na navigaci

Linux E X P R E S, Haskell

Haskell

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


reklama

Č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ů.

Nahoru

Odkazy

(Jako ve škole)
Průměr: 1,50 | Hodnotilo: 2
 

Top články z OpenOffice.cz

Příspěvky

Re: Haskell
7. 05. 2007, 22:22:34
Odpovědět  Odkaz 
Kdyz je tak dulezite zminovat znaky, kterymi se uvadi komentar, tak aspon spravne.. ;) Viceradkove komentare se oznacuji {- zde je komentar -}, samotne slozene zavorky mohou slouzit k urcovani bloku jako v c (alternativa k odsazovani)
Haskell
_ 27. 09. 2007, 15:26:35
Odpovědět  Odkaz 
Hugs nie je prekladac ale interpret. V celom clanku su bez ladu a skladu mixovane pojmy interpret a prekladac|kompilator.
Kompilatory(prekladace) su GHC, NHC, HBC, ... (zdrojovy kod v haskelli sa preklada do binarnej formy, zvacsa priamo pre platformu) a interprety su Hugs, GHCi... (zdrojovy text sa nacita a vykonava, typicke je prostredie prikazoveho riadku kde sa 'programoje' formou dialogu (zadate "let 1+1=3 in 1+1-1" a intepret vam vrati "2"))

Pri literarnom programovani nemusi byt kod uvodzovany len znoakom '>' na zaciatku riadku, ale moze byt pouzita aj 'LaTeX'-ova syntax \begin{code} text \end{code}, ale nemsu byt navzajom kobinovane.

Pattern match by som nenazval unifikaciou... ta sa pouziva napriklad v prologu a ma mierne odlisny vyznam.

Rovnice nie su rovnice ale definicie.

Inak je super ze sa o Haskelli zacina viac pisat aj na ceskom|slovenskom webe...

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Lukáš Faltýnek

Lukáš Faltýnek

Vystudoval informační management na Univerzitě Hradec Králové. Pracuje jako analytik/programátor. Láskou k počítačům vzplanul v roce 1986, kdy dostal svůj první počítač Atari 800 XL. S Unixem se poprvé setkal před dvanácti lety. Chvíli nato pak s Linuxem, který si pro jeho svobodu zamiloval. Je ženatý a má dvě děti. Mezi jeho koníčky patří literatura, kinematografie a cestování.


  • Distribuce: Ubuntu
  • Hodnocení autora: *

| blog