23

Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Programmeerimiskeeled

Varmo Vene

Kalmer Apinis Vesal Vojdani

Kristine Leetberg Hiie Vill

Anti Ingel Raul-Martin Rebane

Arvutiteaduse InstituutTartu �Ulikool

Page 2: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Administratiivinfo

�Uldinfo

MTAT.03.006 6 ainepunkti.

{ Loengud (32 tundi){ Praktikumid (32 tundi){ Iseseisev t�o�o (96 tundi)

Toimumised:

{ R 12.15{14.00, Liivi 2 - 111 (loeng){ T 10.15{12.00, Liivi 2 - 205, 224 (praktikum: inf1, inf2){ T 16.15{18.00, Liivi 2 - 205, 224 (praktikum: inf3, inf4){ K 10.15{12.00, Liivi 2 - 205, 224 (praktikum: inf5, inf6)

Kursuse veebileht: https://courses.cs.ut.ee/2016/PK/fall

Mitteavalikud materjalid Moodle 'i keskkonnas:

http://moodle.ut.ee/

2 / 17

Page 3: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Administratiivinfo

~Opiv�aljundid

Kursuse l�abinu:

omandab �ulevaatlikud teadmised erinevatestprogrammeerimise paradigmadest;

oskab lahendada lihtsaid programmeerimise �ulesandeidfunktsionaalse programmeerimise abil, sealhulgas saab aruja oskab kasutada k~orgemat j�arku pol�umorfseidfunktsioone;

oskab mitme-paradigma keeles kasutada koosfunktsionaalse, imperatiivse ja objekt-orienteeritudparadigma tehnikaid.

3 / 17

Page 4: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Administratiivinfo

Hinde kujunemine

Aine toimub kahes v~ordses osas: Haskell ja Scala

Loengutes ja praktikumides osalemine: kuni 20 punkti (=2*(5+5))

Kodut�o�od: kuni 70 punkti (= 2*5*7)

{ iga kodut�o�o annab kuni 7 punkti{ kummaski osas 6 kodut�o�od, millest arvesse l�aheb 5

Kontrollt�o�od: kuni 110 punkti (= 2*55)

{ m~olemas kontrollt�o�os tuleb saada v�ahemalt 20 punkti

Lisapunktid:

{ Projekt (Sokobani m�angu lahendaja Haskellis){ Boonus�ulesanded

4 / 17

Page 5: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Administratiivinfo

Hindeskaala

Hinne PunkteA suurep�arane � 181B v�aga hea 161� 180C hea 141� 160D rahuldav 121� 140E kasin 101� 120F puudulik 0� 100

5 / 17

Page 6: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Kirjandus

Haskell

Miran Lipova�ca: Learn You a Haskell for Great Good!(2011)

Bryan O'Sullivan, Don Stewart ja John Goerzen: RealWorld Haskell (2008)

H�armel Nestra: Sissejuhatus FunktsionaalsesseProgrammeerimisse (2010)

Scala

Cay S. Horstmann: SCALA for the Impatient (2012)

6 / 17

Page 7: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Programmeerimiskeelte paradigmad

Imperatiivsed keeled

Protseduursed

Fortran, Pascal, C,Ada, (Python)

Objektorienteeritud

Smalltalk, C++, Java,(Python), (Scala)

Deklaratiivsed keeled

Funktsionaalsed

Scheme, ML, Haskell,(Scala), (Python)

Loogilised

Prolog, G�odel, Mercury

7 / 17

Page 8: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Funktsionaalsed keeled

Funktsionaalsete keelte p~ohiomadused

Puudub programmi oleku m~oiste

{ Puuduvad k~orvalefektid, muutujad{ Ilmutatud viidatavus (referential transparency)

Rikkad abstraktsioonivahendid

{ Andmeabstraktsioon{ K~orgemat-j�arku funktsioonid{ Laisk v�a�artustamine

V~oimas t�u�ubis�usteem

{ Staatiline t�u�ubikontroll, t�u�upide tuletamine{ Pol�umor�sm (parameetriline, 'ad-hoc')

8 / 17

Page 9: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Funktsionaalsed keeled

P~ohjusi FP ~oppimiseks

Erinev l�ahenemine programmeerimisele

{ annab uue vaatenurga tuntud probleemide lahendamiseks

FP on "k~orgtaseme" paradigma

{ lubab probleeme lahendada v�aga abstarktsel tasemel{ kergendab vigade leidmist/v�altimist{ v~oit produktiivsuses tihti mitmekordne

M~oju teiste keelte arengule

{ automaatne m�aluhaldus (Java){ pol�umor�sm (C++, Ada)

Lihtne semantika

{ formaalne keele kirjeldamine{ programmide anal�u�us ja teisendamine

9 / 17

Page 10: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Funktsionaalsed keeled

Funktsionaalsete keelte puudusi

M~one �ulesande lahendamisel v~oib omistamine olla vajalik

M~onikord me tahame modellerida v�aliskeskonna olekut

Kasutajaliidese programmeerimine v~oib olla keerulisem

Programmide efektiivsus ei ole mitte alati piisav

Aja- ja m�alukeerukus v~oib olla raskesti ennustatav

10 / 17

Page 11: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Funktsionaalsed keeled

FP l�uhiajalugu

Kombinaatorloogika (M. Sch�on�nkel 1924, H. Curry 1927)

Lambda-arvutus (A. Church 1936)

Lisp (J. McCarthy 1958)

ISWIM (P. Landin 1965)

FP (J. Backus 1977)

ML ja pol�umorfne t�u�ubis�usteem (R. Milner 1978)

Hope, Sasl, Miranda, . . . (1980 { 85)

Haskell (1988)

11 / 17

Page 12: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Funktsionaalsed keeled

Funktsionaalne keel Haskell

L�uhiajalugu

1987 loodi Haskell'i komitee1988 esimene keelekirjeldus (v. 1.0)1999 Haskell982010 Haskell 2010

Kodulehek�ulg: http://www.haskell.org/

Realisatsioonid

ghc kompilaator; Glasgow, Cambridge

12 / 17

Page 13: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

-- fact1 on defineeritud tingimusavaldise abil

fact1 n = if n == 0 then 1

else n * fact1 (n - 1)

13 / 17

Page 14: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

-- fact1 on defineeritud tingimusavaldise abil

fact1 n = if n == 0 then 1

else n * fact1 (n - 1)

Avaldise v�a�artustamine (reduktsioon)

Leitakse funktsiooni de�neeriv v~ordus

Avaldis asendatakse v~orduse parema poolega

Formaalparameetrid asendatakse tegelike argumentidega

Kogu protsessi korratakse kuni rohkem ei saa

13 / 17

Page 15: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

-- fact1 on defineeritud tingimusavaldise abil

fact1 n = if n == 0 then 1

else n * fact1 (n - 1)

N�aide avaldise v�a�artustamisestfact1 2

==> if 2 == 0 then 1 else 2 * fact1 (2-1)==> 2 * fact1 1

==> 2 * (if 1 == 0 then 1 else 1 * fact1 (1-1))==> 2 * (1 * fact1 0)

==> 2 * (1 * (if 0 == 0 then 1 else 0 * fact1 (0-1)))==> 2 * (1 * 1)

==> 2

13 / 17

Page 16: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

{- fact2 on defineeritud naidistega sobitamise abil;

tootab ainult 32/64bitiste taisarvudega -}

fact2 :: Int -> Intfact2 0 = 1fact2 n = n * fact2 (n-1)

14 / 17

Page 17: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

{- fact2 on defineeritud naidistega sobitamise abil;

tootab ainult 32/64bitiste taisarvudega -}

fact2 :: Int -> Intfact2 0 = 1fact2 n = n * fact2 (n-1)

-- fact3 on defineeritud "valvurite" abil

fact3 :: Integer -> Integerfact3 n | n == 0 = 1

| otherwise = n * fact3 (n-1)

14 / 17

Page 18: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

{- fact2 on defineeritud naidistega sobitamise abil;

tootab ainult 32/64bitiste taisarvudega -}

fact2 :: Int -> Intfact2 0 = 1fact2 n = n * fact2 (n-1)

-- fact3 on defineeritud "valvurite" abil

fact3 :: Integer -> Integerfact3 n | n == 0 = 1

| otherwise = n * fact3 (n-1)

-- see ei lahe lopmatusse tsuklisse

fact4 :: Integer -> Integerfact4 n | n == 0 = 1

| n >= 1 = n * fact4 (n-1)

14 / 17

Page 19: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

-- akumulaatorit kasutav faktoriaal

-- defineeritud where konstruktsiooni abil

fact6 :: Integer -> Integerfact6 n = fact6’ 1 n

where fact6’ a 0 = afact6’ a n = fact6’ (a*n) (n-1)

15 / 17

Page 20: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

-- akumulaatorit kasutav faktoriaal

-- defineeritud where konstruktsiooni abil

fact6 :: Integer -> Integerfact6 n = fact6’ 1 n

where fact6’ a 0 = afact6’ a n = fact6’ (a*n) (n-1)

-- akumulaatorit kasutav faktoriaal

-- defineeritud let-avaldise, lambda-abstraktsiooni

-- ja case-avaldise abil

fact7 :: Integer -> Integerfact7 n = let fact7’ = \ a n -> case n of

0 -> a_ -> fact7’ (a*n) (n-1)

in fact7’ 1 n

15 / 17

Page 21: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

-- standartne iteratiivne definitsioon kasutades

-- eeldefineeritud funktsiooni product

-- ja aritmeetilise jada konstruktsiooni

fact8 :: Integer -> Integerfact8 n = product [1..n]

16 / 17

Page 22: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Variatsoone faktoriaalile

-- standartne iteratiivne definitsioon kasutades

-- eeldefineeritud funktsiooni product

-- ja aritmeetilise jada konstruktsiooni

fact8 :: Integer -> Integerfact8 n = product [1..n]

-- pusipunkti kombinaatori abil defineeritud faktoriaal

fact9 :: Integer -> Integerfact9 = fixedPt f

where f g 0 = 1f g n = n * g (n-1)fixedPt f = g where g = f g

16 / 17

Page 23: Automaadid, keeled, translaatoridkodu.ut.ee/~kalmera/pk16/loeng1.pdfAdministratiivinfo Uldinfo MTT.03.00A6 6 ainepunkti. {Loengud (32 tundi) {Praktikumid (32 tundi) {Iseseisev t o

Suur t�anu osalemast

ja

kohtumiseni!