Programvací jazyky F# a OCaml Preface Introduction to F# and functional programming.

Slides:



Advertisements
Podobné prezentace
Název a adresa školy: Střední odborné učiliště stavební, Opava, příspěvková organizace, Boženy Němcové 22/2309, Opava Název operačního programu:OP.
Advertisements

Cumulative tests Tenses Phrases. Put the verbs into the correct form I need a rest. I _______ (run) all morning! John isn´t here. He _______ (go) to the.
Learning program: Mechanic – electrician Name of the program: Numerical systems II. class Conversions between systems Made by: Mgr. Holman Pavel Projekt.
Digitální výukový materiál zpracovaný v rámci projektu „EU peníze školám“ Projekt:CZ.1.07/1.5.00/ „SŠHL Frýdlant.moderní školy“ Škola:Střední škola.
Obchodní akademie a Střední odborná škola, gen. F. Fajtla, Louny, p.o. Osvoboditelů 380, Louny Číslo projektuCZ.1.07/1.5.00/ Číslo sady39Číslo DUM.
O metodě konečných prvků Lect_6.ppt M. Okrouhlík Ústav termomechaniky, AV ČR, Praha Liberec, 2010 Pár slov o Matlabu a o zobrazení čísla na počítači.
1 Škola: Gymnázium, Brno, Slovanské náměstí 7 Šablona: III/2 – Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN prostřednictvím.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_178 Název školyGymnázium, Tachov, Pionýrská 1370 Autor Mgr. Eleonora Klasová Předmět.
ŠKOLA: Gymnázium, Tanvald, Školní 305, příspěvková organizace ČÍSLO PROJEKTU: CZ.1.07/1.5.00/ NÁZEV PROJEKTU: Šablony – Gymnázium Tanvald ČÍSLO.
Digitální výukový materiál zpracovaný v rámci projektu „EU peníze školám“ Projekt:CZ.1.07/1.5.00/ „SŠHL Frýdlant.moderní školy“ Škola:Střední škola.
Číslo projektu CZ.1.07/1.5.00/ Číslo materiálu VY_32_INOVACE_ 007 Název školy Gymnázium, Tachov, Pionýrská 1370 Autor Mgr.Stanislava Antropiusová.
Digitální výukový materiál zpracovaný v rámci projektu „EU peníze školám“ Projekt:CZ.1.07/1.5.00/ „SŠHL Frýdlant.moderní školy“ Škola:Střední škola.
y.cz Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorMgr. Roman Chovanec Název šablonyIII/2.
Digitální výukový materiál zpracovaný v rámci projektu „EU peníze školám“ Projekt:CZ.1.07/1.5.00/ „SŠHL Frýdlant.moderní školy“ Škola:Střední škola.
The written part of the maturita exam III Škola: SOU Valašské Klobouky Ročník: Nástavbové studium Podnikání 2 Název projektu: Zkvalitnění výuky prostřednictvím.
Název a adresa školy: Střední odborné učiliště stavební, Opava, příspěvková organizace, Boženy Němcové 22/2309, Opava Název operačního programu:OP.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM Businessland / Making Contracts 06B16 AutorLadislava Pechová Období vytvořeníLeden.
Online piracy Název školyGymnázium Zlín - Lesní čtvrť Číslo projektuCZ.1.07/1.5.00/ Název projektuRozvoj žákovských kompetencí.
y.cz Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorMgr. Roman Chovanec Název šablonyIII/2.
Název a adresa školy: Střední odborné učiliště stavební, Opava, příspěvková organizace, Boženy Němcové 22/2309, Opava Název operačního programu:OP.
1 Škola: Gymnázium, Brno, Slovanské náměstí 7 Šablona: III/2 – Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN prostřednictvím.
Translation Translate the following sentences from English into Czech. Vzor: I don’t like the translation of this book. Who translated it? Nelíbí se mi.
Autorem materiálu a všech jeho částí, není- li uvedeno jinak, je Ing. Petra Andrlová Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání.
Název a adresa školy: Střední odborné učiliště stavební, Opava, příspěvková organizace, Boženy Němcové 22/2309, Opava Název operačního programu:
Tutorial: Obchodní akademie Topic: Creating Formulas Prepared by : Mgr. Zdeněk Hrdina Projekt Anglicky v odborných předmětech, CZ.1.07/1.3.09/
Obchodní akademie a Střední odborná škola, gen. F. Fajtla, Louny, p.o. Osvoboditelů 380, Louny Číslo projektu CZ.1.07/1.5.00/ Číslo sady 39Číslo.
1 Škola: Gymnázium, Brno, Slovanské náměstí 7 Šablona: III/2 – Inovace a zkvalitnění výuky prostřednictvím ICT – Název projektu: Inovace výuky na GSN prostřednictvím.
Tutorial: Obchodní akademie Topic: Logical Functions Prepared by: Mgr. Zdeněk Hrdina Projekt Anglicky v odborných předmětech, CZ.1.07/1.3.09/ je.
Tutorial: Mechanic - electrician Topic: Basics of electrical engineering the 2nd. year Measuring the capacity Prepared by: Ing. Jiří Smílek Projekt Anglicky.
A Job Interview By Dagmar Machů Škola: SOU Val. Klobouky Ročník: třetí Obor: Kuchař/číšník Název projektu: Zkvalitnění výuky prostřednictvím ICT Předmět:
Tutorial: Mechanik - elektrotechnik Topic: Basics of electrical engineering the 2nd. year Measuring inductance Prepared by: Ing. Jiří Smílek Projekt Anglicky.
 I.E.S. Ramón Menéndez Pidal Secondary School
Podpora rozvoje cizích jazyků pro Evropu 21. stol. INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ Tento projekt je spolufinancován Evropským sociálním fondem a státním.
y.cz Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorMgr. Roman Chovanec Název šablonyIII/2.
Immigration and multiculturalism Název školyGymnázium Zlín - Lesní čtvrť Číslo projektuCZ.1.07/1.5.00/ Název projektuRozvoj žákovských.
Název a adresa školy: Střední odborné učiliště stavební, Opava, příspěvková organizace, Boženy Němcové 22/2309, Opava Název operačního programu:OP.
Course Outline1. Instructor: Martin Hála, PhD. Mathematics DPT, B105,  Further information and downloads on my personal website:
Podpora rozvoje cizích jazyků pro Evropu 21. stol. INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ Tento projekt je spolufinancován Evropským sociálním fondem a státním.
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jan Rozsíval. Slezské gymnázium, Opava, příspěvková organizace. Vzdělávací materiál.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_166 Název školyGymnázium, Tachov, Pionýrská 1370 AutorMgr. Eleonora Klasová PředmětAnglický.
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jan Rozsíval. Slezské gymnázium, Opava, příspěvková organizace. Vzdělávací materiál.
Podpora rozvoje cizích jazyků pro Evropu 21. stol. INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ Tento projekt je spolufinancován Evropským sociálním fondem a státním.
Obchodní akademie a Střední odborná škola, gen. F. Fajtla, Louny, p.o. Osvoboditelů 380, Louny Číslo projektuCZ.1.07/1.5.00/ Číslo sady39Číslo DUM.
y.cz Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorMgr. Roman Chovanec Název šablonyIII/2.
Podpora rozvoje cizích jazyků pro Evropu 21. stol. INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ Tento projekt je spolufinancován Evropským sociálním fondem a státním.
EU peníze středním školám Název vzdělávacího materiálu: Verbs about clothes I Číslo vzdělávacího materiálu: AJ2-4 Šablona: II/2 Inovace a zkvalitnění výuky.
NÁZEV ŠKOLY:Základní škola T. G. Masaryka, Bojkovice, okres Uherské Hradiště AUTOR: Mgr. Pavlína Berčíková NÁZEV:Travelling TÉMATICKÝ CELEK:Receptivní.
Název školy:Základní škola a Mateřská škola Sepekov Autor:Mgr. Hana Červená Název:VY_32_INOVACE_78 _angličtina-gramatika Vzdělávací oblast:Jazyk a jazyková.
Listening VY_32_INOVACE_AJ_2_60 Multiple choice Číslo projektu: CZ.1.07./1.5.00/ Název projektu: Zlepšení podmínek pro vzdělávání na SUŠ, Ostrava.
Gymnázium, Brno, Elgartova 3 GE - Vyšší kvalita výuky CZ.1.07/1.5.00/ III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Téma: English Grammar.
Relative clauses Gymnázium a Jazyková škola s právem státní jazykové zkoušky Zlín Tematická oblastSlovní zásoba a gramatika Datum vytvoření25.
Gymnázium, Brno, Elgartova 3 GE - Vyšší kvalita výuky CZ.1.07/1.5.00/ III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Téma: English Grammar.
Gymnázium, Brno, Elgartova 3 GE - Vyšší kvalita výuky CZ.1.07/1.5.00/ III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Téma: English Grammar.
Driving around the USA Gymnázium a Jazyková škola s právem státní jazykové zkoušky Zlín Tematická oblast Angličtina: The USA Datum vytvoření
GE - Vyšší kvalita výuky
Telephoning and Texting
Název školy Gymnázium, střední odborná škola, střední odborné učiliště a vyšší odborná škola, Hořice Číslo projektu CZ.1.07/1.5.00/ Název materiálu.
Výukový materiál VY_22_INOVACE_36_ Numbers. Part 2
ŠKOLA: Gymnázium, Chomutov, Mostecká 3000, příspěvková organizace
Autor: Mgr. Kateřina Suková
Digitální učební materiál
Název školy: ZŠ Varnsdorf, Edisonova 2821, okres Děčín, příspěvková organizace Jazyk a jazyková komunikace, Anglický jazyk, Minulý čas prostý pravidelných.
Název školy: ZŠ Bor, okres Tachov, příspěvková organizace
Živá fáze.
Výukový materiál VY_22_INOVACE_22_ Phrasal verbs. Part 2
PAST CONTINUOUS MINULÝ ČAS PRŮBĚHOVÝ
Autor: Mgr. Kateřina Suková
DIGITÁLNÍ UČEBNÍ MATERIÁL
In The Year Nejde vložit do pptx – nutno přes prohlížeč.
Střední odborná škola a Střední odborné učiliště, Vocelova 1338
Transkript prezentace:

Programvací jazyky F# a OCaml Preface Introduction to F# and functional programming

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Vznikla minulý rok (Milan Straka) Rozsáhlý přehled jazyků OCaml a F#... včetně poměrně pokročilých vlastností »Tento rok trochu jiný obsah... Spíše úvod do funkcionálního programování a F# Jak FP souvisí s ostatními předměty na MFF? … pokud bude čas tak i více »Webové stránky: O této přednášce...

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Alternativní metody Zajímavější cesta pro ty, které to zajímá :-) Nějaká esej, článek nebo referát... Nějaký projekt (něco zajímavého vymyslíme!) »Za x bodů z domácích úkolů... Domácí úkoly budou na webových stránkách Budou strašně těžké (viz. alternativní metody) Za co bude zápočet?

Functional Programming

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, Functional programming »1930s – Lambda calculus Theoretical foundation of functional languages Attempt to formalize all mathematics »1958 – LISP First functional (computer) programming language »1978 – ML (meta-language) Originally used in theorem proving systems Useful as a general purpose language too!

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »1990 – Haskell Strict and lazy language, many advanced features »1996 – OCaml (based on ML) Combines functional and object-oriented features »2002 – F# (based on OCaml) Microsoft Research functional language for.NET Now official part of Visual Studio 2010 OCaml and F#

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Functional abstractions hide how the code executes and specify what result we’re trying to get »Functional code is easier to understand, modify and reason about (assuming mathematical thinking) »Code is more easily composable and testable »Makes it easier to avoid repetitive patterns »Big topic today: Parallel and asynchronous code Why functional programming?

Programvací jazyky F# a OCaml Chapter 1. Expression as a basic building block

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, Functional programming is a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these languages are formed by using functions to combine basic values. [Hutton ed. 2002] »Evaluation of expressions This is exactly how mathematics works! For example: Functional programming

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Writing equation as a single expression Equations can get long and hard to read How to break long equations into pieces? »Another idea from mathematics: …called let binding in functional languages Program as an expression

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Calculating: 2x 2 – 5x + 3 for x = 2 : »Using let binding to declare value x : Expressions at a small scale… > 2*(2*2) - 5*2 + 3;; val it : int = 1 > let x = 2;; val x : int = 2 > 2*(x*x) - 5*x + 3;; val it : int = 1 “;;” specifies the end of the input F# interactive prints the result Declared symbol with its value We can re-use the symbol

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Writing real programs as expressions Example: describing drawings and animations Expressions at a larger scale… let greenCircle = circle Brushes.OliveDrab 100.0f let blueCircle = circle Brushes.SteelBlue 100.0f let drawing = compose (translate -35.0f 35.0f greenCircle) (translate 35.0f -35.0f blueCircle) af.Animation <- forever drawing;; Declares two circle drawings Composes complex drawing from circles Exception: Modifies state of some object Animation that doesn’t move

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Example continued: composing animations Expressions at a larger scale… let sun = circle (forever Brushes.Goldenrod) 100.0f.forever let earth = circle (forever Brushes.SteelBlue) 50.0f.forever let mars = circle (forever Brushes.Chocolate) 40.0f.forever let moon = circle (forever Brushes.DimGray) 10.0f.forever let planets = sun -- (rotate 160.0f 1.0f (earth -- (rotate 40.0f 12.0f moon))) -- (rotate 250.0f 0.7f mars) Declare “animated” solar system objects Compose solar system from objects

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček Solar system animation

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »The examples so far were single expressions! »Declarative programming The program describes the results we want to get …not steps that should be performed to get it »Composability Build complex programs from simpler pieces …without unexpected interactions »Easy to reason about Calculating the result of an expression is easy Program as an expression

Calculating with expressions

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Unary and binary operators: – unary “–”, binary “+” – standard precedence – specifying precedence »Calculating with floating point numbers: – works as expected – oops! what happened? Calculating with numbers > ;; val it : int = 5 > * 2;; val it : int = 15 > ( ) * 2;; val it : int = 10 > 1.5 * ( );; val it : float = 30.0 > 1.5 * (12 + 8);; error FS0001: The type 'int' does not match the type 'float'

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Each expression has a type Compiler forbids expressions with wrong types »Type of binary numeric operators Expressions have a type… // The most important types > 42;; val it : int = 42 > 42.0;; val it : float = 42.0 > 42.0f;; val it : float32 = 42.0f // Other interesting types > 42uy;; val it : byte = 42uy > 42.0UL;; val it : uint64 = 42UL > 42I;; val it : BigInteger = 42I // Overloaded val (+) : int -> int -> int val (+) : float -> float -> float

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »No conversions happen automatically »Conversion functions are overloaded too: Actually, it is generic – works with any type Any type that satisfies some conditions… Converting numeric values > int 10.0;; val it : int = 10 > int 10.0f;; val it : int = 10 > float 10;; val it : float = 10.0 Calling a function Different type of the parameter val int : float -> int val int : float32 -> int val int : 'T -> int // Where 'T supports conversion to int

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Reading the type of a function Why we always use the “->” symbol? »Calculating square roots of: 2x 2 – 5x + 3 Calling operators and functions val pown : float -> int -> float first parameter second parameter result > (-(-5.0) + sqrt ((pown ) - 4.0*2.0*3.0)) / 2.0*2.0;; val it : float = 6.0 > (-(-5.0) - sqrt ((pown ) - 4.0*2.0*3.0)) / 2.0*2.0;; val it : float = 4.0

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Calculating square roots – again! »Even better – using discriminant: Value bindings let a, b, c = 2.0, -5.0, 3.0 (-b + sqrt ((pown b 2) - 4.0*a*c)) / 2.0*a (-b - sqrt ((pown b 2) - 4.0*a*c)) / 2.0*a let a, b, c = 2.0, -5.0, 3.0 let d = (pown b 2) - 4.0*a*c (-b + sqrt d) / 2.0*a (-b - sqrt d) / 2.0*a

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Value binding is also an expression »If we use line-break in F#, we don’t need “in” Value binding as an expression > let n = 2 * 3 in 100*n + n;; val it : int = 606 > 10 + (let n = 2 * 3 in 100*n + n) + 20;; val it : int = 636 > 10 + (let n = 2 * * n + n) + 20;; val it : int = 636 White-space sensitive We can still do the same thing!

Printing to console & unit type

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »This doesn’t look like an expression: Side-effect: Evaluation of an expression modifies the state of the world (e.g. global variables or console) Avoided where possible, but sometimes needed… »…but, how can this be an expression? Introducing the “unit” type… Printing to the console printfn "Hello world!" > printfn "Hello world!";; val it : unit = ()

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Unit type represents no information It has exactly one value written as “ () ” »Functions without result return unit value Introducing the “unit” type > let unitValue = ();; val unitValue : unit = () > let unitValue = printfn "Hello world!";; Hello world! val unitValue : unit = ()

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Sequencing expressions using semicolon: »In F# we can use new-line instead of “;” »Ignored value should be unit Calculating with unit values > let n = (printfn "calculating"; );; calculating val n : int = 14 > let n = (10 + 2; );; warning FS0020: This expression should have type 'unit', but has type 'int'. val n : int = 14 let n = (printfn "calculating" );;

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Generic function ignore: Ignores any value and returns unit instead »The example from the previous slide: Useful especially when working with.NET Ignoring values > let n = (ignore (10 + 2); );; val n : int = 14 val ignore : 'T -> unit

Conditions and Booleans

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Another useful type – values true and false »Operators have short-circuiting behavior Calculating with Booleans > let b1, b2 = true, false;; > b1 && b2;; val it : bool = false > b1 || b2;; val it : bool = true > true || (printfn "test"; true);; val it : bool = true > true && (printfn "test"; true);; test val it : bool = true Second argument not evaluated Needs second argument too!

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »This is also an expression! The “else” branch may be missing Writing conditions using “if” if d = 0.0 then printfn "one solution" elif d < 0.0 then printfn "no solutions" else printfn "two solutions" > let n = (if d=0.0 then 1 elif d<0.0 then 0 else 2) val n : int = 2 > if d < 0.0 then printfn "yay!";; val it : unit = () > let n = (if (d = 0.0) then 1) error FS0001: This expression was expected to have type ‘unit’ but here has type ‘int’ Returns “unit” in any case What can this return?

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Test value against multiple cases (patterns) »We’ll talk about patterns in detail later Patterns decompose complex data types Conditions using “match” match d with | 0.0 -> printfn "one solution" | discr when discr printfn "no solutions" | _ -> printfn "two solutions" Constant pattern Binding with condition “match-all” pattern

Evaluating expressions

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Example: »We can follow one of the two rules: Rule 1: Evaluate value of symbols first: Rule 2: Replace symbols with expression Evaluation is a reduction let d = (pown ) - 4.0*2.0*3.0 in (5.0 + sqrt d) / 2.0*2.0 ⤳ let d = 1.0 in (5.0 + sqrt d) / 2.0*2.0 ⤳ (5.0 + sqrt 1.0) / 2.0*2.0 ⤳... ⤳ 6.0 ⤳ (5.0 + sqrt ((pown ) - 4.0*2.0*3.0)) / 2.0*2.0 ⤳... ⤳ 6.0

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Analyze the evaluation tree of an expression: Step-by-step application of the two rules »What is the shortest path? Which path will the F# compiler follow? Example let num = (let ten = in ten + ten + 1) in num * 2

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Find an expression where evaluating the value of symbols first is better and another expression where replacing symbols with expressions is better. Better means smaller number of reduction steps (no unnecessary calculations). Homework #1

NPRG049— Programovací jazyky OCaml a F#Tomáš Petříček, »Write expression that prints “yes” if the value of n is less than 10 and “no” otherwise. Without using if and match construct. Homework #2