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

Seotud dokumendid
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

Funktsionaalne Programmeerimine

Funktsionaalne Programmeerimine

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

PHP

Word Pro - diskmatTUND.lwp

1. AKE Ajalise keerukuse empiiriline hindamine

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et

loeng7.key

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

loeng2

Programmeerimiskeel APL Raivo Laanemets 17. mai a.

Word Pro - digiTUNDkaug.lwp

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

vv05lah.dvi

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,

TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilit

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

Microsoft Word - HOTSEC kasutusjuhend v1.900.docx

TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) J

PowerPointi esitlus

Pealkiri

MTAT Operatsioonisüsteemid - Turvalisus

Skriptid ja käsud

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

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

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

lcs05-l3.dvi

MS Word Sisukord Uue dokumendi loomine... 2 Dokumendi salvestamine... 3 Faili nimi... 4 Teksti sisestamine... 6 Klaviatuuril mitteleiduvat sümbolite l

raamat5_2013.pdf

Andmeturve

PowerPointi esitlus

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

Andmed arvuti mälus Bitid ja baidid

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

Praks 1

Peafail3_2.dvi

(loeng3-ohtlikud_koodiloigud)

CSS juhend

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

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

Ruutvormid Denitsioon 1. P n Ütleme, et avaldis i;j=1 a ijx i x j ; kus a ij = a ji ; a ij 2 K ja K on korpus, on ruutvorm üle korpuse K muutujate x 1

Microsoft Word - ref - Romet Piho - Tutorial D.doc

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

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

Algoritmid ja andmestruktuurid

Võistlusülesanne Vastutuulelaev Finaal

Andmebaasid, MTAT Andmebaasikeeled 11.loeng

Microsoft Word - installation-guide.doc

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx

ITI Loogika arvutiteaduses

MOOCi „Programmeerimise alused“ ülesannete lahenduste analüüs

Word Pro - digiTUNDkaug.lwp

Image segmentation

SQL

Kehtiv alates Vormi TSD lisa 3 Applicable from Annex 3 of Form 3 Unofficial translation Maksu- ja Tolliamet Estonian Tax and Cus

MTAT Operatsioonisüsteemid - Turvalisus

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06

D1003_EXTERIOR_DOOR_UK_SE_NO_DK_FI_EE_LV_LT_RU_02_NEUTRAL_WEB

Estonian_TBW-106UB(V1).cdr

12. Marek Kolk, Kõrgem matemaatika, Tartu Ülikool, Algfunktsioon ja määramata integraal Sisukord 12 Algfunktsioon ja määramata integraal 1

PowerPointi esitlus

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

E-arvete juhend

elastsus_opetus_2005_14.dvi

Relatsiooniline andmebaaside teooria II. 6. Loeng

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

Andmebaasid, MTAT loeng Normaalkujud

Jaehinnakiri_2016.xls

+/- 7(chomsky???) Deduktiivne jama 1.Hulkade spetsifitseerimine. Hulk on samalaadsete objektide järjestamata kogum, mida käsitlet

D1003_EXTERIOR_DOOR_UK_SE_NO_DK_FI_EE_LV_LT_RU_02_WEB

Tõlkija poolne märkus: Ma leidsin 2 kohta, kus oli selle mustri parandusi üleval. Esimene neist ametlik VK koduleht. Sealt leitud täiendused ei ole õi

ArcGIS Online Konto loomine Veebikaardi loomine Rakenduste tegemine - esitlus

Microsoft Word - 56ylesanded1415_lõppvoor

ma1p1.dvi

Tarkvaraline raadio Software defined radio (SDR) Jaanus Kalde 2017

Norrison Ametikudumid, Professional knitwear.cdr

Operatsioonisüsteemi ülesanded

Kom igang med Scratch

Praks 1

Tartu Ülikool Matemaatika-Informaatika Teaduskond Referaat Turvaauk CAN INDREK ZOLK Tartu, 2004

XV kursus

elastsus_opetus_2017_ptk3

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

VL1_praks2_2009s

Sissejuhatus Informaatikasse Margus Niitsoo

Praks 1

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

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

prakt8.dvi

Kuidas ärgitada loovust?

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

Väljavõte:

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi*r^2, Float -> Int Infixoperaatori kasutamiseks prefix-vormis tuleb see panna sulgudesse. Näiteks: 3 + 4 == (+) 3 4 Infixoperaatoreid saab ise juurde defineerida: (@) :: Int -> Int -> Int x @ y = 2*x+y või (@) :: Int -> Int -> Int (@) x y = 2*x+y Mõni kord eeldame, et funktsioonirakendused on prefixsed. Kalmer Apinis Programmeerimiskeeled Sügis 2018

2 Infix Operaatorid II Infixoperaatoril on prioriteet (i.k. precedence) Näiteks: 3*4+5 == (3*4)+5, kuna * on tasemel 7 ja + tasemel 6 Infixoperaatoril võib olla assotsiatiivsus näiteks, 2**3**4 == 2**(3**4), 2-3 - 4 == (2-3)-4 Neid seatakse nn. fixity deklaratsioonidega: infixl 7 * infixl 6 + infixl 6 - infixr 8 ** Fixity-deklaratsioone saab vaadata ghci abil: Näiteks käsuga :i (+) Prefix-operaatoreid saab rakendada infix-selt tagurpidi-ülakomade (`) vahel Näiteks: 5 `div` 2

3 Eeldefineeritud operaatorite fixity (Haskell 98) Prec- Left associative Non-associative Right associative edence operators operators operators 9!!. 8 ^, ^^, ** 7 *, /, div, mod, rem, quot 6 +, - 5 :, ++ 4 ==, /=, <, <=, >, >=, elem, notelem 3 && 2 1 >>, >>= 0 $, $!, seq (Funktsioonirakenduse pretsedence on 10.)

4 Ennikud ja Unit tüüp Olemasolevatest tüüpidest saab luua paare ja muid ennikuid: (1,'a'), ((1.1,8,'x'),False) enniku tüüp konstrueeritakse komponentide tüüpidest (1,'a') :: (Int,Char) paarides olevat info saab kätte mustrisobitusega: f :: (Int, Char, String) -> Int f (x,c,ys) = x + 1 Kõige triviaalsem väärtus Haskellis on (). Selle tüüp on samuti () ehk () :: () Kasutatakse juhtudel, kui pole vaja informatsiooni edastada. Paljudes keeltes kasutatakse tüüpi void

5 Järjendid e. listid Järjendi tüübiks on [a], kus a on järjendi elementide tüüp. Näiteks: [Int], [Char], [[Float]] Järjendeid saab kirjutada nii (tüüpide kirjutamine vabatahtlik): [1, 2, 3] :: [Int], [3] :: [Int], [] :: [Int] [True, False, False] :: [Bool], [False] :: [Bool], [] :: [Bool] Haskelli listid on arvuti mälus esindatud puudena: [1, 2, 3] == : 1 : 2 : 3 [] Järjendi loomiseks on kaks konstruktorit, mis vastavad (list-tüüpi) puu tippudele. [] :: [a] (:) :: a -> [a] -> [a] Näide: [3,2,1] == 3 : 2 : 1 : []

6 Listi näited [1, 2, 3] = : 1 : 2 : 3 [] [' a', 'b'] = : a : b [] [[1, 2], []] = : = : [1, 2] : [] [] : 1 : 2 [] : [] []

7 Järjendi e. listid Konstrueerimise vastand on mustrisobitus. Nii saame vaadata, millise konstruktoriga antud väärtus loodi. length [] = 0 length (x:xs) = 1 + length xs või length xs = case xs of [] -> 0 (x:xs) -> 1 + length xs Mustreid sobitatakse "ülevalt all", kuni esimese sobiva leidmiseni! Arvutuskäik: length [1,2,3] == length (1 : (2 : (3 : []))) ==> 1 + length (2 : (3 : [])) ==> 1 + (1 + length (3 : [])) ==> 1 + (1 + (1 + length [])) ==> 1 + (1 + (1 + 0)) ==> 3

8 Listide näited Korrutis product [] = 1 product (x:xs) = x * product xs Listi ümberpööramine reverse [] = [] reverse (x:xs) = reverse xs ++ [x] Järjest asetsevate võrdsete elementide loendamine counteq (x:y:xs) x==y = 1 + counteq (y:xs) otherwise = counteq (y:xs) counteq _ = 0

9 Tähelepanekud : 1 : 2 : 3 [] Elemendi lisamine listi algusse väga kiire! kiire == konstante aeg ja mälu Põhjendus: argumente ei ole vaja kopeerida. Viimase elemendi selekteerimine aeglane! aeglane == lineaarselt listi pikkusega Järjendi lõppu lisamine aeglane! aeglane == aeg ja mälu lineaarne listi pikkusega (tuleb kopeerida) Laiks väärtustamine päästab mõnel juhul! = Listid Haskellis on kasutatavad iteraatoritena Loe lisaks: RWH, lk 10..12, 23..26; LYaH, peatükk 2 lõpp

10 Anonüümsed funktsioonid e. lambdad Defineerides funktsiooni f x y z =... teisendab kompilaator koodi selliseks f = \ x y z ->... Langjoon tähistab lambda arvutuses kasutatavat λ-sümbolit. Sellist süntaksit saab ka ise kasutada. Näiteks, funktsiooni argumendina: map (\ x -> x+1) [1,2,3,4]

11 Laisk väärtustamine programm: rida deklaratsioone. Näiteks: double x = x + x main = double (1+1) redex: redutseeritav avaldis programmis olev avaldis, mida saab lihtsustada. Näiteks: 1+1 kontekst: kõik definitsioonid, mis kehtivad redex-i asukohas. Näited ülevaloleva programmi kohta: 1+1 puhul on kontekstis kogu programm, kuid neid definitsioone ei lähe vaja. järgmisel sammul, kui redexiks x + x on selle näite puhul kontekstis ka x = 2 double (1+1) puhul on kontekstis kogu programm, kuid vaja läheb vaid double definitsiooni.

12 Laisk väärtustamine Lihtsustada saab 1 sisseehitatud operaatoreid, aga ainult siis, kui argumendid on juba normaalkujul. 1 + x ei saa lihtsustada 1 + 1 lihtsustub avaldiseks 2 2 nimesid, mis on kontekstis defineeritud x lihtsustub väärtuseks y+1, kui kontekstis on x = y+1 3 argumendi rakendamist lambda-avaldisele (\x -> x+x) 5 lihtsustub avaldiseks 5+5 4 funktsioonirakendust f e 1... e n (kus f x 1... x n = b) b[x 1 e 1][x 2 e 2]... [x n e n] Näiteks: double (1+1) lihtsustub avaldiseks (1+1)+(1+1) Avaldis on normaalkujul, kui teda ei saa enam lihtsustada!