Programovací í jazyk Haskell

Podobné dokumenty
Programovací jazyk Haskell

Functional and Logic Programming Functional languages

IB015 Neimperativní programování. Seznamy, Typy a Rekurze. Jiří Barnat Libor Škarvada

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

IB015 Neimperativní programování. Redukční strategie, Seznamy program QuickCheck. Jiří Barnat Libor Škarvada

Abstraktní datové typy: zásobník

Funkcionální programování. Kristýna Kaslová

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Komponenty v.net. Obsah přednášky

JavaScript 101. "Trocha života do statických stránek"

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Haskell Hero učební text

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Úvod do programovacích jazyků (Java)

Jazyk C# (seminář 5)

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Řídicí struktury. alg3 1

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Basic256 - úvod do programování Příklady. ing. petr polách

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

PG 9.5 novinky ve vývoji aplikací

Konstruktory překladačů

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

Úvod do programovacích jazyků (Java)

Přednáška 3. Rekurze 1

JAVA. Další jazyky kompilovatelné do Java byte-code

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Funkcionální programování Haskell

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

Paradigmata programování 1

Poslední nenulová číslice faktoriálu

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

NPRG030 Programování I, 2017/18 1 / :22:16

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Zápis programu v jazyce C#

Programovací jazyk Pascal

infixr 0 $! ($!) :: (a->b) -> a -> b f $! x =... interni, pro striktni vyhodnocovani -- vyhodnoti top konstruktor x -}

Časová a prostorová složitost algoritmů

Základy algoritmizace a programování

Algoritmizace prostorových úloh

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Implementace LL(1) překladů

Algoritmizace prostorových úloh

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Vytváření a použití knihoven tříd

Funkcionální programování Haskell

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Programování v Pythonu

ALGORITMIZACE A PROGRAMOVÁNÍ

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

O datových typech a jejich kontrole

Programování v jazyce JavaScript

Regulární výrazy. Filtry grep, sed a awk.

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Proměnné a parametry. predn_08.odt :00:38 1

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Regulární výrazy. Vzory

Jazyk C# a platforma.net

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Skripty základy VB, vestavěné objekty, příklady

Denotační sémantika. Marek Běhálek

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Abstraktní datové typy

Lokální definice (1) plocha-kruhu

Programování v jazyce JavaScript

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Funkcionální programování Haskell

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Popis souboru pro generování reportů *.report

Úvod do databázových systémů

1 Funkce dvou a tří proměnných

Základní datové struktury

Základy algoritmizace a programování

Předmluva 9 Obsah knihy 9 Typografické konvence 10 Informace o autorovi 10 Poděkování 10

Základy programování (IZP)

Základy algoritmizace. Hašování

PCKEYB JEDNOTKA PRO OBSLUHU KLÁVESNICE TYPU PC AT. Příručka uživatele a programátora

Sada 1 - PHP. 03. Proměnné, konstanty

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

5 Přehled operátorů, příkazy, přetypování

2 Strukturované datové typy Pole Záznam Množina... 4

Transkript:

Historie Programovací í jazyk Haskell doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 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 2 Instalace + dokumentace Použití 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 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 3 4

Řídicí příkazy Skript 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" 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) 5 6 Datové typy 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 xs) 1:2:3:[] :: [Int[ Int] [1,2,3] :: [Int] Uspořádané n-ticen (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) -> Int 7 8

Datové typy Definice funkcí Uživatelské datové typy data Barva = Cerna Bila data Tree a = Leaf a Node a (Tree( a) (Tree( a) type String = [Char] Rovnice a unifikace vzorů (pattern matching): f pat11 pat12... = rhs1 f pat21 pat22... = rhs2... Vybere se první rovnice vyhovující parametrům type Tabulka a = [(String, a)] Pokud se nenajde chyba 9 10 Vzory Vzory proměnná inc x = x + 1 konstanta not True = False not False = True seznam length [] = 0 length (x:xs xs) ) = 1 + length xs 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 xs) ) = x:p 11 12

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 (n-1) 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) 13 14 Fibonacciho čísla fib :: Int -> Int fib 0 = 0 fib 1 = 1 fib (n+2) = fib n + fib (n+1) Délka seznamu length [] = 0 length (x:xs( x:xs) ) = 1 + length xs Poznámka ámka: : pozor na konflikt s předdefinovanými funkcemi! module Pokus where import Prelude hiding(length) length [] = 0 length (_:xs xs) ) = 1 + length xs 15 16

Lokální definice Částeční aplikace funkcí 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 Curryho tvar funkce add :: Int -> Int -> Int add x y = x + y plus :: (Int( Int, Int) -> Int plus (x,y( 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 = (+) 17 18 Funkce pro seznamy Vytvoření seznamu druhých mocnin dm [] = [] dm (x:xs( x:xs) ) = sq x : dm xs where sq x = x * x Seřazení seznamu (quicksort( quicksort) qs [] = [] qs (x:xs)) = let ls = filter (< x) xs rs = filter (>=x) xs in qs ls ++ [x] ++ qs rs 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 19 20

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 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] takewhile (>0) [1,3,0,4] = [1,3] dropwhile (> 0) [1,3,0,4] = [0,4] filter (>0) [1,3,0,2,-1] 1] = [1,3,2] Transformace seznamu reverse [1,2,3,4] = [4,3,2,1] map (*2) [1,2,3] = [2,4,6] 21 22 Ú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 t hodnotu zkombinuji s prvním prvkem seznamu, abych dostal výsledek? maximum (x:y:ys( x:y:ys) ) x > y = maximum (x:ys( x:ys) otherwise = maximum (y:ys( y:ys) 23