Programovací jazyk Haskell

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Pro začátek něco lehčího
Tomáš Petříček Microsoft C# MVP
Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Přednáška 11 Jiří Šebesta
Uživatelem definované typy doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
Seznamy v jazyce Haskell doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
Programování v Pascalu Přednáška 3
Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
BPGA RS Logix 500 a Logix 5000 Ing. Radek Štohl, Ph.D.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Programovací jazyk Haskell Ing. Lumír Návrat  katedra informatiky, A 1018 
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Medians and Order Statistics Nechť A je množina obsahující n různých prvků: Definice: Statistika i-tého řádu je i-tý nejmenší prvek, tj., minimum = statistika.
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
Dlouhodobá maturitní práce studentů Tomáše Kurce & Jana Kuželky
Informatika I 3. přednáška
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Podmienený príkaz. Kĺúčové slová  Pro podmínky se v Pascalu používají klíčové příkazy IF, THEN a ELSE.  Také se jim říká „príkaz vetvenia"..  Příkaz.
Algoritmy a programovací techniky
Datové struktury a algoritmy Část 5 Abstraktní datové typy
Abstraktní datové typy doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
PictureBox u vkládání obrázků u vlastnost Picture pomocí příkazu LoadPicture u přiřazení obrázku mezi dvěma prvky PictureBox Auto.Picture = AutoCerv.Picture.
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
Funkcionální programování Haskell
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Aplikační počítačové prostředky X15APP MATLAB Katedra elektroenergetiky, Fakulta elektrotechniky ČVUT, Technická 2, Praha 6 Ing. Zbyněk Brettschneider.
Programovací jazyk Haskell doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Klikací mapy v GIMPu Tvorba tzv. klikacích (obrázkových) map s pomocí grafického editoru GIMP Dostupné z Metodického portálu ISSN: ,
Import záznamů diplomových prací nové řešení Antonín Vaishar, SUAleph, 26. –
Uživatelem definované typy Ing. Lumír Návrat  katedra informatiky, A 1018 
Seznamy v jazyce Haskell Ing. Lumír Návrat  katedra informatiky, D-403 
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Aplikační počítačové prostředky X15APP MATLAB cvičení 4
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
5. Statistica Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Jarkovský, L. Dušek, M. Cvanová.
Úvod do UNIXu (6th round)
23/04/20151 LINQ (1) LINQ (Language Integrated Query) je součást MS.NET Frameworku umožňující jednotný přístup k datům a jejich zpracování deklarativ-
doc. RNDr. Zdeněk Botek, CSc.
Úvod do UNIXu (6 th round) David Hoksza
Cvičení 3-4 Procedury, funkce,řetězce. Procedury Procedura Procedura Procedura je podprogram, který mění stav programu (změnou stavu proměnných nebo změnou.
Funkcionální programování Haskell Jan Hric, KTIML MFF UK,
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
ZPRACOVÁNÍ VSTUPŮ POST a GET. METODY ZPRACOVÁNÍ VSTUPŮ 2.
Funkcionální programování Haskell
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Programovací jazyk C++
Algoritmizace a programování
Databázové systémy a SQL
Databázové systémy a SQL
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Podprogramy.
Databázové systémy a SQL
Funkcionální programování Haskell
5. Statistica Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Jarkovský, L. Dušek, M. Cvanová.
Funkcionální programování Haskell
Funkcionální programování Haskell
Databázové systémy a SQL
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

Programovací jazyk Haskell Ing. Lumír Návrat  katedra informatiky, D 403  59 732 3252

FLP - Programovací jazyk Haskell Historie září 1991 – Gofer experimentální jazyk Mark P. Jones únor 1995 – Hugs Hugs98 téměř úplná implementace jazyka Haskell 98 některá rozšíření navíc FLP - Programovací jazyk Haskell

Instalace + dokumentace Základní zdroje http://haskell.org popis jazyka a knihoven http://haskell.org/hugs instalace (Win / Unix) uživatelská příručka (je součástí instalace) Další součásti Scholl of Expression (SOE) Hugs Graphics Library FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Použití Princip výpočtu: kalkulátor $ hugs Prelude> 2*(3+5) 16 Prelude> cos 0 1.0 Prelude> Skript: definice uživatelských funkcí $ hugs priklad.hs FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Řídicí příkazy Editace souboru :edit [soubor.hs] :e Načtení skriptu :load [soubor.hs] :reload Ukončení :quit Nápověda :? Unix – nastavení editoru v souboru ~/.profile export HUGSFLAGS="-E\"vi +%d %s\" +t +s -u" FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Skript priklad.hs module Priklad where -- funkce, která vrací součet dvou čísel soucet x y = x + y priklad.lhs > module Priklad where Funkce, která vrací faktoriál čísla > f n = if n == 0 then 1 else n * f (n-1) FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Datové typy Základní datové typy 1::Int ‘a’::Char True,False::Bool 3.14::Float Seznamy [a] prázdný seznam [] neprázdný seznam (x:xs) 1:2:3:[] :: [Int] [1,2,3] :: [Int] FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Datové typy Uspořádané n-tice (a,b,c,...) (1,2) :: (Int,Int) (1,['a','b'])::(Int, [Char]) () :: () Funkce a->b faktorial :: Int -> Int soucet :: Int -> Int -> Int plus :: (Int, Int) -> Int FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Datové typy Uživatelské datové typy data Barva = Cerna | Bila data Tree a = Leaf a | Node a (Tree a) (Tree a) type String = [Char] type Tabulka a = [(String, a)] FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Definice funkcí Rovnice a unifikace vzorů (pattern matching): f pat11 pat12 ... = rhs1 f pat21 pat22 ... = rhs2 ... Vybere se první rovnice vyhovující parametrům Pokud se nenajde  chyba FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Vzory proměnná inc x = x + 1 konstanta not True = False not False = True seznam length [] = 0 length (x:xs) = 1 + length xs FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Vzory n-tice plus (x,y) = x+y konstruktor uživatelského typu nl (Leaf _) = 1 nl (Tree _ l r) = (nl l) + (nl r) pojmenování části vzoru duphd p@(x:xs) = x:p FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Vzory anonymní proměnná _ hd (x:_) = x vzor typu n+k fact 0 = 1 fact (n+1) = (n+1)*fact n strážené rovnice fact n | n == 0 = 1 | otherwise = n * fact(n-1) FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Příklady Faktoriál fakt1 n = if n == 0 then 1 else n * fakt1 (n-1) fakt2 0 = 1 fakt2 n = n * fakt2 (n-1) fakt3 0 = 1 fakt3 (n+1) = (n+1) * fakt3 n fakt4 n | n == 0 = 1 | otherwise = n * fakt4 (n-1) FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Příklady Fibonacciho čísla fib :: Int -> Int fib 0 = 0 fib 1 = 1 fib (n+2) = fib n + fib (n+1) FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Příklady Délka seznamu length [] = 0 length (x:xs) = 1 + length xs Poznámka: pozor na konflikt s předdefinovanými funkcemi! module Pokus where import Prelude hiding(length) length [] = 0 length (_:xs) = 1 + length xs FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Lokální definice Konstrukce let ... in f x y = let p = x + y q = x – y in p * q Konstrukce where f x y = p * q where p = x + y q = x - y FLP - Programovací jazyk Haskell

Částeční aplikace funkcí Curryho tvar funkce add :: Int -> Int -> Int add x y = x + y plus :: (Int, Int) -> Int plus (x,y) = x + y add = curry plus curry :: ? plus = uncurry add uncurry :: ? Řezy funkce inc x = 1 + x inc x = add 1 x inc = add 1 inc = (+1) = (1+) add = (+) FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Příklady Vytvoření seznamu druhých mocnin dm [] = [] dm (x:xs) = sq x : dm xs where sq x = x * x Seřazení seznamu (quicksort) qs [] = [] qs (x:xs) = let ls = filter (< x) xs rs = filter (>=x) xs in qs ls ++ [x] ++ qs rs FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Funkce pro seznamy Přístup k prvkům seznamu head [1,2,3] = 1 tail [1,2,3] = [2,3] last [1,2,3] = 3 init [1,2,3] = [1,2] [1,2,3] !! 2 = 3 null [] = True length [1,2,3] = 3 FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Funkce pro seznamy Spojení seznamů [1,2,3] ++ [4,5] = [1,2,3,4,5] [[1,2],[3],[4,5]] = [1,2,3,4,5] zip [1,2] [3,4,5] = [(1,3),(2,4)] zipWith (+) [1,2] [3,4] = [4,6] Agregační funkce sum [1,2,3,4] = 10 product [1,2,3,4] = 24 minimum [1,2,3,4] = 1 maximum [1,2,3,4] = 4 FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Funkce pro seznamy Výběr části seznamu take 3 [1,2,3,4,5] = [1,2,3] drop 3 [1,2,3,4,5] = [4,5] takeWhile (>0) [1,3,0,4] = [1,3] dropWhile (> 0) [1,3,0,4] = [0,4] filter (>0) [1,3,0,2,-1] = [1,3,2] Transformace seznamu reverse [1,2,3,4] = [4,3,2,1] map (*2) [1,2,3] = [2,4,6] FLP - Programovací jazyk Haskell

FLP - Programovací jazyk Haskell Úkol Pokuste se uvedené funkce pro seznamy implementovat co je triviální případ? length [] = 0 maximum [x] = x funkci umím udělat s kratším seznamem -> jak tuto hodnotu zkombinuji s prvním prvkem seznamu, abych dostal výsledek? maximum (x:y:ys) | x > y = maximum (x:ys) | otherwise = maximum (y:ys) FLP - Programovací jazyk Haskell