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

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 
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Vstup a výstup doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
Programovací jazyk C++
Přednáška 11 Jiří Šebesta
Programování funkcí v Excelu
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.
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Skriptový jazyk, který se používá při tvorbě stránek.
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.
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
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
DEKLARACE PROMĚNNÝCH A KONSTANT
Proměnné v PHP Každý programovací jazyk pracuje s nějakými hodnotami. To, do čeho se tyto hodnoty ukládají, se nazývá proměnné. Každý programovací jazyk.
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
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
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: ,
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)
doc. RNDr. Zdeněk Botek, CSc.
Operační systém UNIX Příkazové prostředí UNIXu: příkaz [argumenty] [jméno] Ve jménech příkazů a parametrech se rozlišují malá a velká písmena.
Úvod do UNIXu (6 th round) David Hoksza
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
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Programovací jazyk Haskell
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
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

Programovací jazyk Haskell Ing. Lumír Návrat  katedra informatiky, A 1018 

FLP - Programovací jazyk Haskell2 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 Haskell3 Instalace + dokumentace Základní zdroje popis jazyka a knihoven instalace (Win / Unix) uživatelská příručka (je součástí instalace) Další součásti School of Expression (SOE) Hugs Graphics Library

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

FLP - Programovací jazyk Haskell5 Ří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 Haskell6 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 Haskell7 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 Haskell8 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 Haskell9 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 Haskell10 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 Haskell11 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 Haskell12 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 = x:p

FLP - Programovací jazyk Haskell13 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 Haskell14 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 Haskell15 Příklady Fibonacciho čísla fib :: Int -> Int fib 0 = 0 fib 1 = 1 fib (n+2) = fib n + fib (n+1)

FLP - Programovací jazyk Haskell16 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 Haskell17 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 Haskell18 Čá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 Haskell19 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 in qs ls ++ [x] ++ qs rs

FLP - Programovací jazyk Haskell20 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 Haskell21 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 Haskell22 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 Haskell23 Ú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)