Functional and Logic Programming Functional languages

Podobné dokumenty
Programovací jazyk Haskell

Programovací í jazyk Haskell

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

Funkcionální programování

IB111 Úvod do programování skrze Python Přednáška 13

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

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

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

IB111 Úvod do programování skrze Python Přednáška 13

Martin Hejtmánek hejtmmar

Úvod. Programovací paradigmata

Programovací jazyky. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

Funkcionální programování úvod

Paradigmata programování II Přednáška 1: Vedlejší efekt

IB111 Programování a algoritmizace. Programovací jazyky

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

Programovací jazyk C# Verze jazyka 3.0

Programovací jazyk. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

Programovací jazyk C# Verze jazyka 3.0

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

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programming languages and compilers Programming languages

Programming languages and compilers Programming languages

PARADIGMATA PROGRAMOVÁNÍ 2A VEDLEJŠÍ EFEKT

Jaký programovací jazyk učit jako první a jak ho učit?

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

11. Přehled prog. jazyků

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

Algoritmizace a programování

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

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

Program a životní cyklus programu

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

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ů

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

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

PG 9.5 novinky ve vývoji aplikací

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Programovací jazyky. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Abstraktní datové typy: zásobník

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

9 - Map/filter/reduce OMO. Ing. David Kadleček, PhD

Úvod do programovacích jazyků (Java)

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

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

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Stručný úvod do programování v jazyce C 2.díl. České vysoké učení technické Fakulta elektrotechnická

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Řídicí struktury. alg3 1

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Tvorba aplikace typu klient/server pomocí Windows Communication Foundation

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Programovací jazyk Pascal

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

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

2011 Jan Janoušek BI-PJP. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

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

Programovací jazyky. Obsah. Proč používáme programovací jazyky? Programovací jazyk

Jakub Čermák Microsoft Student Partner

8 Třídy, objekty, metody, předávání argumentů metod

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

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Algoritmizace prostorových úloh

PB161 Základy OOP. Tomáš Brukner

Compression of a Dictionary

6 Příkazy řízení toku

Teoretické minimum z PJV

Paralelní programování

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

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

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

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

Základy C++ doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

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

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

WORKSHEET 1: LINEAR EQUATION 1

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Paradigmata programování 1

2. lekce Algoritmus, cyklus Miroslav Jílek

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Konstruktory překladačů

Matematika v programovacích

O makrech, která umí aritmetiku s velkými čísly. Macros Which Handle Arithmetics with Big Numbers. Jan Šustek KMa PřF OU. Brejlov

Algoritmizace. Cíle předmětu

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

Hrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.

Paměť počítače. alg2 1

Objektově orientované programování

DTP Základy programování Úvod do předmětu

Transkript:

Functional and Logic Programming Functional languages Ing. Marek Běhálek FEI VŠB-TUO A-1018 / 597 324 251 http://www.cs.vsb.cz/behalek marek.behalek@vsb.cz This presentation is based on original course materials coming from doc. Ing Miroslav Beneš Ph.D.

Introduction - Language classification Imperativní - programy jsou posloupnosti základních příkazů (nejčastěji přiřazení) s odpovídajícími řídicími strukturami (např. cykly), jež určují, které příkazy se budou provádět a v jakém pořadí. C, Pascal, Fortran, JSI Deklarativní jazyky - popisujeme, co se má vypočítat, ne jak. Logické - programy jsou kolekcemi tvrzení v konkrétní logice (nejčastěji predikátové) Prolog, Goedel Funkcionální - programy se popisují jako soustavy rovností s aplikacemi funkcí na hodnoty. FP, LISP, Scheme, ML, Haskell Programming languages 2

History Teoretické začátky Alonzo Church 30. léta - lambda-kalkul jako základ teorie vyčíslitelnosti Alan Turing ukázal, že stroj může řešit problémy "programování ve strojovém kódu omezuje rychlost a snadnost programování počítačů John von Neumann pojem paměti základní model většiny současných počítačů návrh zkratek pro Mark I Programming languages 3

History Language and computer s architecture Omezení jazyku na to, co lze efektivně implementovat na současných procesorech. Von Neumannova architektura Model klasických procesorů Základ klasických jazyků Funkcionální jazyky Backus (1978, Turing Adward) kritika přístupu od architektury k jazyku Funkcionální jazyky jsou efektivnější než imperativní Lze dokazovat vlastnosti programů Jednoduše je lze paralelizovat Založeno na algebraických pravidlech Malá efektivita implementace možné optimalizace Programming languages 4

Funkcionální programování Rozdíly mezí imperativními a deklarativními jazyky Imperativní jazyky Program má implicitní stav, který se modifikuje konstrukcemi programovacího jazyka. Explicitní pojem pořadí příkazů Vyjadřuje, jak se má program vyhodnocovat Vychází z aktuální (Von Neummanovy) architektury počítačů Jednoduchá a efektivní realizace Deklarativní jazyky Program nemá implicitní stav. Program je tvořen výrazy, ne příkazy. Popisujeme co se má spočítat, ne jak. Není dáno pořadí příkazu. Efektivní implementace vyžaduje komplexní optimalizace. Funkcionální jazyky x Relační (logické) jazyky Programming languages 5

Funkcionální programování Funkcionální programovací jazyky (1) Vycházejí z λ-kalkulu základním modelem výpočtu je matematický pojem Funkce aplikované na argument a vypočítávající deterministicky její výsledek. Program je složen s funkcí bez vedlejších efektů. Funkce jsou brány jako běžné hodnoty ( first-class values ). Funkcionální jazyky mají lepší mechanismus abstrakce Možnost abstrahovat chování pomocí funkcí vyššího řádu. Program je budován z funkcí jejich kompozicí. Většinou mnohem stručnější programy Funkcionální programovací jazyky neobsahují přiřazení, příkazy, cykly atd. Opakování je řešeno pomocí rekurze. Přiřazení má matematický význam. Proměnná má v daném kontextu vždy tutéž hodnotu referenční transparence. Programming languages 6

Funkcionální programování Funkcionální programovací jazyky (2) Umožňují nové algebraické přístupy Lazy evaluation ( x eager evaluation) Možnost používat potencionálně nekonečné struktury. Možnost oddělení dat od řízení nemusíme se starat o to, jak proběhne vyhodnocení. Umožňuje nové přístupy k vývoji programů Možnost dokazovat programy Možnost transformovat program na základě algebraických vlastností Umožňuje lepší využití paralelního provádění programů Jednoduchá dekompozice programů na části, které lze vyhodnocovat paralelně. Potencionálně příliš mnoho paralelismů. Možnost kompozice dvou paralelních úloh jednoduchou kompozicí funkcí. Programming languages 7

Funkcionální programování - λ-kalkul 1930 Alonzo Church netypovaný λ-kalkul matematická teorie funkcí Základ všech funkcionálních jazyků Některé konstrukce i v imperativních jazycích (např. Python) Programming languages 8

Funkcionální programování - Syntaxe λ-kalkulu Proměnné x, y, z, f, g, λ-abstrakce (λx. e) Aplikace (e 1 e 2 ) Konvence pro závorky λx. λy. e 1 e 2 = (λx. (λy. e 1 e 2 )) e 1 e 2 e 3 = ((e 1 e 2 ) e 3 ) Programming languages 9

Funkcionální programování - Proměnná označuje libovolnou hodnotu v daném kontextu označuje vždy tutéž hodnotu (neexistuje možnost přiřazení) vázaná a volná proměnná λ x. f x vázaná volná Programming languages 10

Funkcionální programování - λ-abstrakce λ x. e Funkce s parametrem x a tělem e λ x y. e Funkce s parametry x, y a tělem e ekvivalentní zápisu λ x. (λ y. e) λ e. e (λ f x (f x x)) (λ f x (f x x)) Programming languages 11

Funkcionální programování - Aplikace (e 1 e 2 ) aplikace Function e 1 na argument e 2 (f x y) aplikace Function (f x) na argument y aplikace Function f na argumenty x a y Programming languages 12

Funkcionální programování - Normalizační teorémy redex --- reducible expression výraz, který lze dále redukovat; α-redex, β-redex normální forma výrazu výraz neobsahuje žádný β-redex Church-Rosserovy teorémy Pokud e1 e2, pak existuje výraz e takový, že e1 e a e2 e Pokud e1 e2 a e2 je v normální formě, pak existuje redukční posloupnost z e1 do e2 (normální redukční posloupnost) Pokud existuje normální forma, lze k ní dojít normální redukční posloupností (leftmost outermost redex) Programming languages 13

Haskell - Haskell září 1991 Gofer Experimental language Mark P. Jones únor 1995 Hugs Hugs98 Nearly full implementation of programming language Haskell 98 Some extension implemented Základní zdroje http://haskell.org Language specification and other resources http://haskell.org/hugs Installation packages (Win / Unix) User s manual (is a part of installation) Programming languages 14

Haskell Hugs Interpret Basic evaluation: calculator $ hugs Prelude> 2*(3+5) 16 Script: containing user s definitions $ hugs example.hs Editing of source code :edit [file.hs] :e Loading of source code :load [file.hs] :reload Exiting work :quit Help :? Programming languages 15

Haskell Scritp example.hs module Example where -- Function computing sum of two numbers sum x y = x + y Example.lhs > module Example where Function computing factorial > f n = if n == 0 then 1 else n * f (n-1) Programming languages 16

Haskell Data types(1) Basic data types 1::Int a ::Char True,False::Bool 3.14::Float Lists [a] Empty list [] Non-empty list (x:xs) 1:2:3:[] :: [Int] [1,2,3] :: [Int] Ordered tuples (a,b,c,...) (1,2) :: (Int,Int) (1,['a','b'])::(Int, [Char]) () :: () Programming languages 17

Haskell Data types(2) Function a->b factorial :: Int -> Int sum:: Int -> Int -> Int plus :: (Int, Int) -> Int User defined data types data Color = Black White data Tree a = Leaf a Node a (Tree a) (Tree a) type String = [Char] type Table a = [(String, a)] Programming languages 18

Haskell Type classes Type class set of types with specific operations Num: +, -, *, abs, negate, signum, Eq: ==, /= Ord: >, >=, <, <=, min, max Constrains, type class specification elem :: Eq a => a -> [a] -> Bool minimum :: Ord a => [a] -> a sum :: Num a => [a] -> a Programming languages 19

Haskell Function definition Equation and pattern unification (pattern matching): f pat11 pat12... = rhs1 f pat21 pat22... = rhs2... First corresponding equation is chosen. If there is none error Programming languages 20

Haskell Patterns variable inc x = x + 1 constant not True = False not False = True List length [] = 0 length (x:xs) = 1 + length xs tupels plus (x,y) = x+y User s type constructor nl (Leaf _) = 1 nl (Node _ l r) = (nl l) + (nl r) Named pattern s parts duphd p@(x:xs) = x:p Another patterns - n+k fact 0 = 1 fact (n+1) = (n+1)*fact n Programming languages 21

Haskell Example Factorial 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) Fibonacci numbers fib :: Int -> Int fib 0 = 0 fib 1 = 1 fib (n+2) = fib n + fib (n+1) Programming languages 22

Haskell Example List length length [] = 0 length (x:xs) = 1 + length xs Comment: be aware of name conflict with previously defined functions! module Example where import Prelude hiding(length) length [] = 0 length (_:xs) = 1 + length xs Programming languages 23

Haskell Local definition Construction let... in f x y = let p = x + y q = x y in p * q Construction where f x y = p * q where p = x + y q = x - y Programming languages 24

Haskell Partial function application inc x = 1 + x inc x = add 1 x inc = add 1 inc = (+1) = (1+) add = (+) Eta reduction Point free programming lcasestring s = map tolower s lcasestring = map tolower Programming languages 25

Haskell Lambda abstraction Using function like a parameter nonzero xs = filter p xs where p x = x /= 0 nonzero xs = filter (/= 0) xs nonzero xs = filter (\x -> x/=0) xs \ x -> e λx. e inc = \x -> x+1 plus = \(x,y) -> x + y dividers n = filter (\m -> n `mod` m == 0) [1..n] Programming languages 26

Haskell Example Example creating a list of squared numers dm [] = [] dm (x:xs) = sq x : dm xs where sq x = x * x List s ordering (quicksort) qs [] = [] qs (x:xs) = let ls = filter (< x) xs rs = filter (>=x) xs in qs ls ++ [x] ++ qs rs Programming languages 27