Funktsionaalne Programmeerimine

Seotud dokumendid
Funktsionaalne Programmeerimine

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi

Vabavara programmi ACDChemSketch kasutamine struktuurivalemite koostamiseks

Operatsioonisüsteemide ehitus

Image segmentation

Pythoni Turtle moodul ja Scratchi värvilisem pool Plaan Isikukoodi kontrollnumbri leidmine vaatame üle lahenduse kontrollnumbri leimiseks. Pythoni joo

Word Pro - diskmatTUND.lwp

loeng2

Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul ühe muutuja funktsioo

Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimu

Võistlusülesanne Vastutuulelaev Finaal

Tartu Ülikool Matemaatika-informaatikateaduskond Puhta Matemaatika Instituut Algebra õppetool Riivo Must Mõned katsed üldistada inversseid poolrühmi M

Print\A4\QualifyReduced.pmt

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons

Andmed arvuti mälus Bitid ja baidid

Andmebaasid, MTAT loeng Normaalkujud

Microsoft Word - 56ylesanded1415_lõppvoor

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta

loeng7.key

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx

Programmi Pattern kasutusjuhend

8.klass 4 tundi nädalas, kokku 140 tundi Hulkliikmed ( 45 tundi) Õppesisu Hulkliige. Hulkliikmete liitmine ja lahutamine ning korrutamine ja jagamine

6. KLASSI MATEMAATIKA E-TASEMETÖÖ ERISTUSKIRI Alus: haridus- ja teadusministri määrus nr 54, vastu võetud 15. detsembril E-TASEMETÖÖ EESMÄRK Tas

prakt8.dvi

Matemaatika ainekava 8.klass 4 tundi nädalas, kokku 140 tundi Kuu Õpitulemus Õppesisu Algebra (65 t.) Geomeetria (60 t.) Ajavaru kordamiseks (15 õppet

Word Pro - digiTUNDkaug.lwp

Sissejuhatus Informaatikasse Margus Niitsoo

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü

Matemaatilised meetodid loodusteadustes. I Kontrolltöö I järeltöö I variant 1. On antud neli vektorit: a = (2; 1; 0), b = ( 2; 1; 2), c = (1; 0; 2), d

Matemaatiline analüüs III 1 4. Diferentseeruvad funktsioonid 1. Diferentseeruvus antud punktis. Olgu funktsiooni f : D R määramispiirkond D R selles p

PHP

Eesti koolinoorte LIII matemaatikaolümpiaad 28. jaanuar 2006 Piirkonnavoor Hindamisjuhised Lp hindaja! 1. Juhime Teie tähelepanu sellele, et alljärgne

X Window System tuntud kui: X11, X, X-Windows akendussüsteem/akendesüsteem rastergraafikat toetavatele ekraanidele UNIX-maailmas väga levinud mitmesug

ArcGIS rakendused välitöödeks Raido Valdmaa AlphaGIS

SQL

Pintsli otsade juurde tegemine Esiteks Looge pilt suurusega 64x64 ja tema taustaks olgu läbipaistev kiht (Transparent). Teiseks Minge kihtide (Layers)

Print\A4\QualifyReduced.pmt

IMO 2000 Eesti võistkonna valikvõistlus Tartus, aprillil a. Ülesannete lahendused Esimene päev 1. Olgu vaadeldavad arvud a 1, a 2, a 3,

Antennide vastastikune takistus

MergedFile

Microsoft Word - Lisa 3 PK matemaatika.docx

Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust Kaupmees teeb päringu Pocopayle aadressile

StandardBooks_versiooni_uuendusWin

1. AKE Ajalise keerukuse empiiriline hindamine

Operatsioonisüsteemide ehitus

Treeningvõistlus Balti tee 2014 võistkonnale Tartus, 4. novembril 2014 Vastused ja lahendused 1. Vastus: 15, 18, 45 ja kõik 0-ga lõppevad arvud. Olgu

19. Marek Kolk, Kõrgem matemaatika, Tartu Ülikool, Arvridade koonduvustunnused Sisukord 19 Arvridade koonduvustunnused Vahelduvat

7 KODEERIMISTEOORIA 7.1 Sissejuhatus Me vaatleme teadete edastamist läbi kanali, mis sisaldab müra ja võib seetõttu moonutada lähteteadet. Lähteteade

Neurovõrgud. Praktikum aprill a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust k

BIM360 ja RealityCapture

Programmeerimiskeel APL Raivo Laanemets 17. mai a.

OÜ Lemonsport Hummel spordivarustus Raplamaa JK õpilastele ja pereliikmetele Valik september Jalgpallikooli võistlus- ja treeningvarustus 20

Polünoomi juured Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n a n 1 x

01_loomade tundmaõppimine

(10. kl. I kursus, Teisendamine, kiirusega, kesk.kiirusega \374lesanded)

HAJUSSÜSTEEMID HAJUSSÜSTEEMID Kaugprotseduurid IDL kompileerimine ONCIDLnäide CORBAIDLnäide MIDLnäide DCERPCmuidomadusi XML-RPC JSON-RPC REST document

GRUPI-SMS Veebirakenduse kasutamise juhend Rakendus Elisa grupi-smsi rakendus Väljaandja Elisa Eesti AS Juhendi koostamise kuupäev Versioon

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06

CAD-süsteemide OÜ

raamat5_2013.pdf

lcs05-l3.dvi

Euroopa Liidu Nõukogu Brüssel, 24. september 2015 (OR. en) 12353/15 ADD 2 ENV 586 ENT 199 MI 583 SAATEMÄRKUSED Saatja: Kättesaamise kuupäev: Saaja: Eu

Microsoft Word - P6_metsamasinate juhtimine ja seadistamine FOP kutsekeskharidus statsionaarne

AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeri

Euroopa Liidu Nõukogu Brüssel, 31. märts 2017 (OR. en) 7644/17 PTS A 25 A-PUNKTIDE NIMEKIRI Teema: Kuupäev: 3. aprill 2017 Koht: EUROOPA LIIDU NÕUKOGU

Osakogumite kitsendustega hinnang Kaja Sõstra 1 Eesti Statistikaamet Sissejuhatus Valikuuringute üheks oluliseks ülesandeks on osakogumite hindamine.

MMFA For Laura

AINEPROGRAMM Õppeaasta: 2015/16 Semester: I õpp Aine kood: RKE111 (MI, AT, ET, TI, RA, LI erialadele) Aine nimetus: KUJUTAV GEOMEETRIA Õppejõud P. Sok

Microsoft Word - SDEMuutused.doc

lvk04lah.dvi

Tartu Ülikool MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Andmemudelite graafilise disaini vahendite võrdlus Bakalaureusetöö (6 EAP) Au

Microsoft PowerPoint - loeng2.pptx

TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Informaatika eriala Joosep Norma Eestikeelsete matemaatika õpiprogrammide üle

Microsoft Word - SEB_Progressiivne_Pensionifond_investeeringute_aruanne_jaanuar_2012.doc

Kontrollijate kommentaarid a. matemaatikaolümpiaadi piirkonnavooru tööde kohta Kokkuvõtteks Ka tänavu püüdsime klasside esimesed 2 ülesa

G aiasoft Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon ja hilisemad K

Võrguinverterite valik ja kasutusala päikeseelektrijaamades Robert Mägi insener

Kerala State Haj Committee HAJ 2014 Flight Manifest FLIGHT NO. SV-5731 DATE: 14/09/2014 TIME: 16:35 RETURN FLIGHT NO: SV-5764 DATE: Cov No

vv05lah.dvi

Matemaatika 1.Valdkonnapädevus Matemaatikapädevus tähendab matemaatiliste mõistete ja seoste tundmist, suutlikkust kasutada matemaatikat temale omase

Lisa 2 Kõrge õpimotivatsiooniga õpilaste väikerühmade graafik 2017/2018 õppeaastal. Rühm Õpetaja Tunni toimumise aeg IV kooliaste Eesti keel IV koolia

Jaehinnakiri_2016.xls

Pealkiri

Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni a.

HARMONY Aroma Handcraft Collection 1

AINE NIMETUS: MATEMAATIKA AINEKAVA I-III KOOLIASMTES ÜLDOSA Põhikooli riiklik õppekava: Õppe- ja kasvatuseesmärgid Õppeaine kirjeldus Kooliastmete õpi

Euroopa Liidu Nõukogu Brüssel, 19. juuli 2019 (OR. en) 11128/19 PV CONS 40 SOC 546 EMPL 417 SAN 343 CONSOM 203 PROTOKOLLI KAVAND EUROOPA LIIDU NÕUKOGU

PowerPointi esitlus

Mida me teame? Margus Niitsoo

pkm_2016_ptk7_olekuvõrrandid

Väljavõte:

Geomeetrilised kujundid Geomeetriliste kujundite definitsioon: data Shape = Rectangle Side Side Ellipse Radius Radius RtTriangle Side Side Polygon [Vertex] deriving Show type Radius = Float type Side = Float type Vertex = (Float,Float) VARMO VENE 1

Regiooni definitsioon: Regioonid data Region = Shape Shape Translate Vector Region Scale Vector Region Complement Region Region Union Region Region Intersect Region Empty deriving Show type Vector = (Float,Float) VARMO VENE 2

Pildid Pildid on konstrueeritud regioonidest Regioonid omakorda geomeetrilistest kujunditest Pildid lisavad regioonidele värvid data Picture = Region Color Region Picture Over Picture EmptyPic deriving Show data Color = Black Blue Green Cyan Red Magenta Yellow White VARMO VENE 3

Pildid Piltide joonistamine: drawpic :: Window -> Picture -> IO () drawpic w (Region c r) = drawregioninwindow w c r drawpic w (p1 Over p2) = do { drawpic w p2 ; drawpic w p1 } drawpic w EmptyPic = return () VARMO VENE 4

Regioonide joonistamine Regioonide joonistamisel kasutame SOEGraphics teegis defineeritud vahendeid SOEGraphics defineerib oma graafilise regiooni abstraktse tüübi, mis kannab ka nime Region Nimekonfliktide vältimiseks peame selle importima kvalifitseeritult import SOEGraphics hiding (Region) import qualified SOEGraphics as G (Region) Nüüd saame graafilisi regioone kasutada nimega G.Region VARMO VENE 5

Graafilised regioonid Funktsioonid graafiliste regioonidega: createrectangle :: Point -> Point -> G.Region createellipse :: Point -> Point -> G.Region createpolygon :: [Point] -> G.Region andregion orregion xorregion diffregion :: G.Region -> G.Region -> G.Region :: G.Region -> G.Region -> G.Region :: G.Region -> G.Region -> G.Region :: G.Region -> G.Region -> G.Region drawregion :: G.Region -> Graphic VARMO VENE 6

Regioonide joonistamine Vaja teisendada meie regioonid graafilisteks regioonideks regiontogregion :: Region -> G.Region Siis on regioonide joonistamine lihtne: drawregioninwindow :: Window -> Color -> Region -> IO () drawregioninwindow w c r = drawinwindow w (withcolor c (drawregion (regiontogregion r))) VARMO VENE 7

Regiooni teisendamine graafiliseks Esimene (lihtsustatud) katse: data NewRegion = Rect Side Side regtonreg :: Region -> NewRegion regtonreg (Shape (Rectangle sx sy)) = Rect sx sy regtonreg (Scale (x,y) r) = regtonreg (scalereg (x,y) r) scalereg (x,y) (Shape (Rectangle sx sy)) = Shape (Rectangle (x*sx) (y*sy)) scalereg (x,y) (Scale s r) = Scale s (scalereg (x,y) r) VARMO VENE 8

Regiooni teisendamine graafiliseks Antud lahendus on väga ebaefektiivne (Scale (x1,y1) (Scale (x2,y2)... (Shape (Rectangle sx sy))... )) Kui meil on vaja teisendada regiooni, mida on skaleeritud n korda, siis regtonreg teeb O(n 2 ) regioonipuu läbivaatust! Probleem (ja ka lahendus) on sama mis listide ümberpööramisel VARMO VENE 9

Listide ümberpööramine Lihtne, kuid ebaefektiivne definitsioon: reverse :: [a] -> [a] reverse [] = [] reverse (x:xs) = reverse xs ++ [x] Akumuleeriva parameetriga (lineaarse keerukusega) versioon: reverse xs = rev [] xs where rev acc [] = acc rev acc (x:xs) = rev (x:acc) xs VARMO VENE 10

Regiooni teisendamine graafiliseks Teine (lihtsustatud) katse: regtonreg :: Region -> NewRegion regtonreg r = rtonr (1,1) r rtonr :: (Float,Float) -> Region -> NewRegion rtonr (x1,y1) (Shape (Rectangle sx sy)) = Rect (x1*sx) (y1*sy) rtonr (x1,y1) (Scale (x2,y2) r) = rtonr (x1*x2,y1*y2) r Lõppversioonis tuleb lisaks skaleerimisfaktorile akumuleerida ka nihutusfaktorit VARMO VENE 11

Regiooni teisendamine graafiliseks regiontogregion :: Region -> G.Region regiontogregion r = regtogreg (0,0) (1,1) r regtogreg :: Vector -> Vector -> Region -> G.Region regtogreg loc sca (Shape s) = shapetogregion loc sca s regtogreg loc (sx,sy) (Scale (u,v) r) = regtogreg loc (sx*u,sy*v) r regtogreg (lx,ly) (sx,sy) (Translate (u,v) r) = regtogreg (lx+u*sx,ly+v*sy) (sx,sy) r VARMO VENE 12

Regiooni teisendamine graafiliseks Kuna tühja graafilist regiooni SOEGraphics ei defineeri, siis kautame tühja ristkülikut regtogreg loc sca Empty = createrectangle (0,0) (0,0) Ühendi teisendamine: regtogreg loc sca (r1 Union r2) = let gr1 = regtogreg loc sca r1 gr2 = regtogreg loc sca r2 in orregion gr1 gr2 Kuna ühisosa (ja ka täiend) on analoogilised, siis on mõistlik defineerida seda ühist malli esitav abifunktsioon VARMO VENE 13

Regiooni teisendamine graafiliseks primgreg loc sca r1 r2 op = let gr1 = regtogreg loc sca r1 gr2 = regtogreg loc sca r2 in op gr1 gr2 regtogreg loc sca (r1 Union r2) = primgreg loc sca r1 r2 orregion regtogreg loc sca (r1 Intersect r2) = primgreg loc sca r1 r2 andregion regtogreg loc sca (Complement r) = primgreg loc sca winrect r diffregion VARMO VENE 14

Regiooni teisendamine graafiliseks Regiooni täiendi teisendamiseks on vaja kogu tasandit hõlmavat graafilist regiooni Kuna täpselt sellist graafilist regiooni ei ole, siis kasutame sellena akna suurust ristkülikut: winrect :: Region winrect = Shape (Rectangle (pixeltoinch xwin) (pixeltoinch ywin)) Jäänud on veel geomeetriliste kujundite teisendamine shapetogregion :: Vector -> Vector -> Shape -> G.Region VARMO VENE 15

Ristkülik shapetogregion (lx,ly) (sx,sy) (Rectangle s1 s2) = createrectangle (trans (-s1/2,-s2/2)) (trans ( s1/2, s2/2)) where trans (x,y) = (xwin2 + inchtopixel((x+lx)*sx), ywin2 - inchtopixel((y+ly)*sy)) s1 s1/2 s2/2 s2 VARMO VENE 16

Ellips shapetogregion (lx,ly) (sx,sy) (Ellipse r1 r2) = createellipse (trans (-r1,-r2)) (trans (r1,r2)) where trans (x,y) = (xwin2 + inchtopixel((x+lx)*sx), ywin2 - inchtopixel((y+ly)*sy)) r2 r1 VARMO VENE 17

Polügon ja täisnurkne kolmnurk shapetogregion (lx,ly) (sx,sy) (Polygon vs) = createpolygon (map trans vs) where trans (x,y) = (xwin2 + inchtopixel((x+lx)*sx), ywin2 - inchtopixel((y+ly)*sy)) shapetogregion (lx,ly) (sx,sy) (RtTriangle s1 s2) = createpolygon (map trans [(0,0),(s1,0),(0,s2)]) where trans (x,y) = (xwin2 + inchtopixel((x+lx)*sx), ywin2 - inchtopixel((y+ly)*sy)) VARMO VENE 18

Kujundite teisendamine uuesti Funktsioon trans kordub iga võrduse juures, kuna where-konstruktsioon käib ainult ühe võrduse kohta Võime defineerida globaalselt, aga siis peame andma lisaparameetritena nihke- ja skaleerimisfaktori Teine võimalus on kasutada case-avaldist: shapetogregion (lx,ly) (sx,sy) s = case s of Rectangle s1 s2 -> createrectangle (trans (-s1/2,-s2/2)) (trans ( s1/2, s2/2)) VARMO VENE 19

Kujundite teisendamine uuesti... Ellipse r1 r2 -> createellipse (trans (-r1,-r2)) (trans ( r1, r2)) Polygon vs -> createpolygon (map trans vs) RtTriangle s1 s2 -> createpolygon (map trans [(0,0),(s1,0),(0,s2)]) where trans (x,y) = (xwin2 + inchtopixel (lx+x*sx), ywin2 - inchtopixel (ly+y*sy)) VARMO VENE 20

Näide: Piltide joonistamine draw :: String -> Picture -> IO () draw s p = rungraphics $ do w <- openwindow s (xwin,ywin) drawpic w p spaceclose w r1 = Shape (Rectangle 3 2) r2 = Shape (Ellipse 1 1.5) r3 = Shape (RtTriangle 3 2) r4 = Shape (Polygon [(-2.5,2.5), (-3.0,0), (-1.7,-1.0),(-1.1,0.2), (-1.5,2.0)]) VARMO VENE 21

Näide (jätkub): Piltide joonistamine xunion :: Region -> Region -> Region p1 xunion p2 = (p1 Intersect Complement p2) Union (p2 Intersect Complement p1) reg1 = r3 xunion (r1 Intersect Complement r2 Union r4) pic1 = Region Blue reg1 VARMO VENE 22