sissejuhatus - courses.cs.ut.ee · kõrgemat järku funktsioon on selline, mis võtab funktsiooni...

34
1 Sissejuhatus 1 Funktsionaalse programmeerimise paradigma 2 Funktsionaalse programmeerimise paradigma

Upload: others

Post on 07-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1

Sissejuhatus

1 Funktsionaalse programmeerimise paradigma 2

Funktsionaalse programmeerimiseparadigma

Page 2: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.1 Programmeerimise paradigmad

3

Programmeerimise paradigmad

1 Funktsionaalse programmeerimise paradigma

1.1 Programmeerimise paradigmad

4

Lai jaotus

• Imperatiivne programmeerimine.

• Deklaratiivne programmeerimine.

– Funktsionaalne programmeerimine.

– Loogiline programmeerimine.

Page 3: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.1 Programmeerimise paradigmad

5

Imperatiivne vs deklaratiivne paradigma

• Imperatiivne programm sätestab otseselt arvutuse sammsammulisekäigu.

Imperatiivne programm on käskude jada.

• Deklaratiivne programm kirjeldab otseselt hoopis matemaatilisi ob-jekte ja abstraktseid seoseid nende vahel.

Programm on deklaratsioonide kogum.

1 Funktsionaalse programmeerimise paradigma

1.1 Programmeerimise paradigmad

6

Imperatiivne vs deklaratiivne paradigma

• Imperatiivse programmi mõte selgub arvutusprotsessi detailidest.

• Deklaratiivse programmi mõtte tabamiseks pole arvutusprotsessidetailidesse vaja süveneda.

Paradigma Programmimõte

Arvutusedetailid

Imperatiivne kaudne otseneDeklaratiivne otsene kaudne

Page 4: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.1 Programmeerimise paradigmad

7

Arvutus deklaratiivses paradigmas

Programmi tekst ei peegelda vahetult täitmisaegset tegevust.

– Arvutusprotsess tuleneb koodist kõigi programmide jaoks min-gil ühtsel sisseehitatud viisil.

– Programmeerija peab oskama arvutusprotsessi detailidega prog-rammeerimisel arvestada.

∗ Pole kasu koodist, mis kirjeldab abstraktselt õiget asja,kuid arvutab kauem kui oodata jaksame.

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

8

Funktsionaalse programmeerimiseeritunnused

Page 5: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

9

Eritunnuste loetelu

• Funktsioonid, samuti protseduurid ja struktuurid, on käsitletavad kuitavalised andmed.

• Arvutus põhineb avaldiste väärtustamisel.

• Kehtib nn ilmutatud viidatavus.

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

10

Funktsioonid on andmed

Funktsioone, protseduure, struktuure saab kasutada võrdsel alusel ta-valiste andmetega.

– Avaldise väärtus võib olla funktsioon.

– Iga funktsioon võib olla omakorda funktsiooni argumendiks jafunktsiooni väärtuseks, samuti andmestruktuuri komponendiks.

Page 6: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

11

Suur väljendusvõimsus

Funktsioonide käsitamine tavaliste andmetena suurendavad oluliseltvõimalusi asju lühidalt väljendada.

– Tegevusi on võimalik programmeerida parameetrilisena teistetegevuste suhtes.

∗ Nt funktsioon, mis antud järjendi iga elemendiga teeb an-tud tegevust. (Ei pea iga tegevuse jaoks eraldi defineerima.)

– Uusi funktsioone on võimalik koostada jooksvalt kohapeal.

∗ Nt liitmisest saame ühe argumendi fikseerimisel funktsioo-ni, mis liidab oma argumendile selle arvu.

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

12

Avaldiste väärtustamine

Arvutuses on kesksel kohal avaldiste väärtustamine —

avaldise teisendamine eesmärgiga saada infot tema väärtusekohta.

Andmedeklaratsioonid programmis kujutavad endast sisuliselt avaldis-te teisendusreeglite loetelu.

Page 7: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

13

Ilmutatud viidatavus kui kõrvalefektide puudumine

Ilmutatud viidatavus —

tingimus, mille kohaselt avaldise väärtuse määravad ainuüksi te-ma (päris)alamavaldiste väärtused.

Kõrvalefekt —

nähtus, kus avaldise väärtustamine toob kaasa väärtustuskesk-konna seisu muutuse (nt muudab mõne muutuja väärtust).

Ilmutatud viidatavus tähendab teisi sõnu kõrvalefektide puudumist.

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

14

Ilmutatud viidatavuse järeldused

• Alamavaldist võib alati asendada sama väärtusega avaldisega.

– Matemaatikas on sarnane alusprintsiip — võrdse asendamiselvõrdsega saame võrdsed.

– Filosoofias on sarnane nn Leibnizi seadus.

• Funktsioon määrab alati matemaatilise funktsiooni —

eeskirja, mis seab igale võimalikule argumendile vastavusse täp-selt ühe väärtuse.

Funktsioon ei samastu oma definitsiooniga.

Page 8: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

15

Ilmutatud viidatavuse järeldused

• Muutuja väärtust ühe ja sama skoobi (tähendusulatuse, nähtavuspiir-konna) sees muuta ei saa.

– Paralleel matemaatikaga: valemis võivad muutujad küll omadasuvalisi väärtusi, kuid konkreetse muutuja kõigi esinemiste tähen-dus valemi ühe lugemise ajal on sama.

• Sama avaldis sama skoobi samal lugemisel on alati sama väärtusega.

– Ka välise maailma sündmused ei muuda avaldiste väärtust.

1 Funktsionaalse programmeerimise paradigma

1.2 Funktsionaalse programmeerimise eritunnused

16

Ilmutatud viidatavuse järeldused

• Puudub omistamine.

– Arvutuse vahetulemuste salvestamine tuleb realiseerida, algväär-tustades nendega uusi muutujaid (nt funktsiooni parameetreid).

• Puuduvad tsüklid.

– Tsüklilised protsessid tuleb realiseerida rekursiooniga.

Page 9: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.3 Lisatunnused, mis omased eelkõige funktsionaalsele paradigmale

17

Lisatunnused, mis omased eelkõigefunktsionaalsele paradigmale

1 Funktsionaalse programmeerimise paradigma

1.3 Lisatunnused, mis omased eelkõige funktsionaalsele paradigmale

18

Lisatunnuste nimekiri

• Tugev staatiline tuletusega tüübisüsteem.

• Laisk väärtustamine.

Page 10: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.3 Lisatunnused, mis omased eelkõige funktsionaalsele paradigmale

19

Staatiline vs dünaamiline tüüpimine

Staatiline tüüpimine tähendab, et tüübid määratakse kindlaks jubaprogrammi kompileerimise ajal.

– Võimaldab kompileerimisel rohkem vigu avastada, täitmisele lä-hevad kvaliteetsemad programmid.

– Võimaldab kompileerimisel erineva kujuga andmeid ära tundaja mälu reserveerida vastavalt vajadusele.

Dünaamilise tüüpimise puhul tegeldakse tüüpide väljaselgitamisegaprogrammi täitmise ajal.

1 Funktsionaalse programmeerimise paradigma

1.3 Lisatunnused, mis omased eelkõige funktsionaalsele paradigmale

20

Tugev vs nõrk tüüpimine

Tugev tüüpimine tähendab, et andmete kasutamine tüübilt sobimatulviisil arvutuse käigus on täiesti välistatud.

– Ei lase juhtuda olukorral, kus programm sooritab tüübivigaseoperatsiooni ilma veast teatamata.

Vastandub nõrk tüüpimine.

Page 11: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.3 Lisatunnused, mis omased eelkõige funktsionaalsele paradigmale

21

Tuletusega vs kontrolliga tüübisüsteem

Tüübituletus tähendab tüüpide automaatset tuletamist konteksti põh-jal, kui programmeerija pole tüüpe deklareerinud.

Tüübikontroll tähendab programmeerija poolt deklareeritud tüüpidekooskõlalisuse automaatset kontrollimist.

1 Funktsionaalse programmeerimise paradigma

1.3 Lisatunnused, mis omased eelkõige funktsionaalsele paradigmale

22

Laisk väärtustamine

Laisk väärtustamine on väärtustamine vastavalt vajadusele.

– Kui funktsiooni väärtuse leidmisel argumenti vaja ei lähe, siisargument jääb väärtustamata.

Struktuurset argumenti väärtustatakse ainult määral, mil seda onfunktsiooni väärtuse leidmiseks vaja.

Agar väärtustamine tähendab, et funktsiooni väärtuse leidmisel arvu-tatakse alati kõigepealt argument välja.

Page 12: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.3 Lisatunnused, mis omased eelkõige funktsionaalsele paradigmale

23

Väärtustamise järjekorrad

Väärtustamise järjekord vastab tippude töötlemise järjestusele avaldisepuu läbimisel.

– Agaral väärtustamisel võrdub funktsioonide väljakutsete järjes-tus neile vastavate tippude lõppjärjestusega.

– Laisal väärtustamisel on funktsioonide väljakutsete järgnevussarnane eesjärjestusega, aga harude järjestus valitakse vajadus-põhiselt ja mittevajalikud harud jäetakse vahele.

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

24

Funktsionaalse programmeerimise eelised japuudused

Page 13: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

25

Eelis 1

• Programmid suhteliselt kergesti loetavad.

– Ei pea arvutuse detailidesse süüvima.

– Programmid on ülevaatlikud ja suhteliselt lühikesed.

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

26

Eelis 2

• Esmaversioonide, prototüüpide programmeerimine lihtne ja kiire.

(Võib ära tasuda, isegi kui põhiversioon kirjutatakse muus keeles.)

– Vähe tüütut detailide kirjapanekut.

– Võimalik suhteliselt kiiresti palju realisatsioonivariante läbi proo-vida ja võrrelda.

– Kõrgemat järku funktsioonid võimaldavad programmeerida sar-naseid tegevusi ühekorraga sama koodijupiga.

Page 14: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

27

Eelis 3

• Elementaarseid asju tegema (nt kalkulaatorina kasutama) õppiminelihtne.

– Notatsioon (süntaks ja selle mõistmine) on lähedane matemaatikakeele põhimõtetele, tulenevalt ilmutatud viidatavusest ja avaldistekesksest rollist.

– Eeldefineeritud kõrgemat järku funktsioonid võimaldavad pärispalju huvitavat ära teha.

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

28

Eelis 4

• Programmi korrektsuse tõestamine suhteliselt lihtne.

– Detailid ei sega.

– Programmi kirjapanek funktsionaalse keele notatsioonis teeb suu-re sammu vajalikus suunas ära.

Page 15: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

29

Puudus 1

• Nõuab palju ressurssi, nii aega kui mälu.

– Palju andmete kopeerimist ilmutatud viidatavuse tõttu.

– Funktsionaalne arvutusmasin, avaldiste väärtustaja, on põhimõt-telt keerukam kui imperatiivne käsutäitmismasin.

– Laisk väärtustamine tekitab mällu pikki väärtustamata avaldisi.

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

30

Puudus 2

• Mõned ülesandetüübid raskesti programmeeritavad.

– Interaktsioon välismaailmaga, sisend-väljund.

– Sündmuspõhised algoritmid.

– Otsene mäluhaldus.

Page 16: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

1 Funktsionaalse programmeerimise paradigma

1.4 Funktsionaalse programmeerimise eelised ja puudused

31

Puudus 3

• Heaks programmeerijaks saamine suhteliselt raske.

– Vaja avaldiste väärtustaja keerulist “hingeelu” tunda.

– Vaja matemaatilist mõtlemist.

2 Haskelli maailm 32

Haskelli maailm

Page 17: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm 33

Haskell

Haskell on keel, mille peal toimub käesolevas kursuses praktilineõpe.

– Kehtiv uus standard on Haskell 2010.

– Eelmine oli Haskell 98.

– . . .

Mõtteviis on eri versioonides praktiliselt sama või erineb vaid vähe-märgatavais detailides.

2 Haskelli maailm

2.0 Funktsionaalse programmeerimise eelised ja puudused

34

Puhtalt funktsionaalne keel

Keel on puhtalt funktsionaalne, kui temas ei saagi teisiti kui funkt-sionaalselt programmeerida.

Standard-Haskell on puhtalt funktsionaalne.

Page 18: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm 35

Programmielementide tähendus

Haskellis on neli põhilist tähenduskategooriat:

– andmed,

– tüübid,

– liigid,

– klassid.

Eri kategooriad omavahel ei lõiku.

2 Haskelli maailm 36

Klassifitseerimisvahekorrad

Kolme viimase tähenduskategooria objektid klassifitseerivad teiste tä-henduskategooriate objekte:

– tüübid klassifitseerivad andmeid,

– liigid klassifitseerivad tüüpe,

– klassid klassifitseerivad samuti tüüpe.

Page 19: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

37

Andmed ja tüübid

2 Haskelli maailm

2.1 Andmed ja tüübid

38

Üldist

Tüübid klassifitseerivad andmeid.

– Igas tüübis on peale normaalsete andmete veel ⊥—

nn bottom, mis tähistab normaalsel kujul info täielikkupuudumist, arvutuse ebaõnnestumist.

Ebaõnnestumine võib tekkida

∗ täitmisaegsest veast;

∗ lõpmatust arvutusest, mis kunagi midagi välja ei anna.

– Ükski anne ei kuulu mitmesse tüüpi.

Page 20: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

39

Loetelutüübid

Loetelutüüp on tüüp, mis sisaldab ainult üksikandmeid.

– Int — lühikeste (4-baidiste) täisarvude tüüp.

– Integer — suvapikkusega täisarvude tüüp.

– Float ja Double — ujukomaarvutüübid.

– Char — (teksti)sümbolitüüp.

2 Haskelli maailm

2.1 Andmed ja tüübid

40

Veel loetelutüüpe

“Tõelised” loetelutüübid (defineeritud andmete loetlemisega).

– Bool — tõeväärtusetüüp.

∗ Andmed False ja True.

– Ordering — suurusvahekorratüüp.

∗ Andmed LT, EQ, GT,tähistavad vastavalt vahekordi “väiksem”, “niisama suur”,“suurem”.

– . . . .

Page 21: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

41

Struktuuritüübid

Struktuuritüüp sisaldab andmestruktuure, vastandudes loetelutüü-pidele.

– Listitüübid.

– Nurjumisega tüübid.

– Järjenditüübid ehk korrutistüübid.

– Summatüübid.

2 Haskelli maailm

2.1 Andmed ja tüübid

42

Listid

Listid on tähtsaimad andmestruktuurid funktsionaalses programmee-rimises.

– List on üht tüüpi andmete joru.

∗ Listi paigutatud andmeid nimetatakse tema elementi-deks.

– Iga tüübi A jaoks on oma listitüüp ListA, mis sisaldab liste ele-mentidega tüübist A.

Page 22: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

43

Listi ehitus

List (mis pole ⊥) tüübist ListA võib olla

– tühi — [],

– mittetühi — kujul x : l, kus

∗ x on listi esimene element, anne tüübist A,

∗ l on listi ülejäänud elementide list samas järjekorras, oma-korda tüübist ListA.

Mittetühjas listis x : l on x nn listi pea ja l listi saba.

2 Haskelli maailm

2.1 Andmed ja tüübid

44

Lõplikud, lõpmatud, osalised listid

Mis saab, kui listi algusest elemente järjest minema visata?

– Lõpliku listiga alustades jõuame lõpliku arvu sammudega tühjalistini.

– Lõpmatu listiga alustades jääb mistahes lõpliku arvu sammudejärel järele mittetühi (täpsemalt, omakorda lõpmatu) list.

– Osalise listiga alustades jõuame lõpliku arvu sammudega (lis-titüübi) bottomini.

Page 23: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

45

Sõned

Sõned on sümbolite listid:

– tühi sümbolite list on tühi sõne;

– mittetühja sümbolite listi

∗ pea on sõne esimene sümbol ja

∗ saba on sõne osa teisest sümbolist lõpuni.

2 Haskelli maailm

2.1 Andmed ja tüübid

46

Nurjumisega tüübid

Nurjumisega tüübid võimaldavad arvutuse ebaõnnestumist kujutadanormaalse väärtusena.

– Iga tüübi A jaoks on üks nurjumisega tüüp MaybeA.

– Iga (bottomist erinev) anne tüübist MaybeA võib olla

∗ nurjumine — Nothing,

∗ kujul Justx, kus x on anne tüübist A.

Page 24: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

47

Järjenditüübid

Erinevalt listidest on järjendid

– kindla komponentide arvuga,

– komponentide tüübid on üksteisest sõltumatud ja võivad erineda(ehkki on järjenditüübiga määratud).

2 Haskelli maailm

2.1 Andmed ja tüübid

48

Paarid

Tähtsaimad järjendid on kahe komponendiga paarid.

– Mistahes tüüpide A, B jaoks on olemas paaritüüp A×B.

– Iga (bottomist erinev) paar tüübist A×B on kujul (x, y), kus

x on anne tüübist A ja

y on anne tüübist B.

Page 25: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

49

Funktsioonid

Funktsioonid saavad mingeid objekte argumendiks ja annavad igaargumendi jaoks mingi talle vastava objekti väärtuseks.

– Funktsiooni f väärtust argumendil x tähistatakse

järjestkirjutusega f x.

– Argumendi andmist funktsioonile nimetatakse

funktsiooni rakendamiseks argumendile.

– Funktsioonid ei ole andmestruktuurid ega üksikandmed.

2 Haskelli maailm

2.1 Andmed ja tüübid

50

Funktsioonitüübid

Funktsioonid jagunevad funktsioonitüüpidesse.

– Mistahes tüüpide A ja B jaoks on olemas funktsioonitüüpA→B.

– Tüüp A→ B sisaldab funktsioonid, mis

võtavad argumente tüübist A ja

annavad väärtusi tüübist B.

Page 26: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

51

Mitme argumendiga funktsioonid

Mitme argumendiga funktsioone võib esitada

– funktsioonina, mille argumenditüüp on järjenditüüp,

– funktsioonina, mille väärtusetüüp on funktsioonitüüp.

2 Haskelli maailm

2.1 Andmed ja tüübid

52

Karritamine

Mitme argumendiga funktsiooni üleviimist esimest kujust teise nime-tatakse karritamiseks.

– Kui funktsiooni tüüp on A1 × . . . × Al → B, siis karritamiselsaame funktsiooni tüüpi A1 → . . .→ Al → B.

– Vahe on vaid vormiline: karritatud funktsioon annab sama tule-muse samadel argumentidel, kuid võtab argumente mitte järjen-dis koos, vaid ükshaaval.

Page 27: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

53

Kõrgemat järku funktsioonid

Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks.

2 Haskelli maailm

2.1 Andmed ja tüübid

54

Järk

Teine võimalus defineerida on täpsustada järgu mõistet.

– 0. järku funktsioon on objekt, mis ei sisalda funktsioone.

– Kui n on positiivne, siis n. järku funktsiooniks nimetataksefunktsiooni, mille

∗ iga võimalik argument sisaldab vaid n-st madalamat järkufunktsioone ja

∗ iga võimalik väljaantav väärtus sisaldab vaid ülimalt n. jär-ku funktsioone.

Kõrgemat järku funktsioon on funktsioon, mille järk on suurem kui 1.

Page 28: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

55

Agarad ja laisad funktsioonid

Funktsiooni f nimetatakse agaraks, kui f ⊥ = ⊥.

Vastasel korral nimetatakse teda laisaks.

2 Haskelli maailm

2.1 Andmed ja tüübid

56

Protseduuritüübid

Eraldi protseduuritüübid eristavad keskkonnast mõjutatud andmetegamanipuleerimisi keskkonnast mõjutamata andmetest.

– Iga tüübi A jaoks leidub protseduuritüüp IOA.

– Protseduur tüüpi IOA edastab oma töö lõpul andme tüübist A,mis võib olla keskkonnast mõjutatud.

Uut keskkonnast mõjutatud annet saavad kasutada ainult järgne-vad protseduurid.

Page 29: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.1 Andmed ja tüübid

57

Ekstensionaalsus

Matemaatikas kehtib ekstensionaalsus:

– kui funktsioonidel f , g on ühised argumendid ja iga argumendix korral f x = g x, siis f = g;

– kui paaridel p, q on vastavad komponendid võrdsed, siis p = q;

– . . .

2 Haskelli maailm

2.1 Andmed ja tüübid

58

Ekstensionaalsus Haskellis

Haskellis kehtib ekstensionaalsus seni, kui ⊥ pole asjasse segatud.

– Funktsioonitüübi ⊥ annab suvalisele argumendile rakendadesvälja (väärtusetüübi) ⊥, kuid seda teeb ka konstantne “päris”funktsioon.

– Paaritüübi ⊥ komponendid on bottomid, kuid sama kehtib ka“päris” paari (⊥ ,⊥) puhul.

– . . .

Page 30: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.2 Tüübid ja liigid

59

Tüübid ja liigid

2 Haskelli maailm

2.2 Tüübid ja liigid

60

Tüübid laiemalt

Tüüp tähendab laiemalt mitte ainult andmekogumit, vaid ka funkt-siooni, mis tüüpidele seab vastavusse tüüpe.

– List (ilma argumendita) on tüüp — seab igale andmekoguminamõeldud tüübile A vastavusse tüübi ListA.

– Analoogselt Maybe ja IO on laiemas mõttes tüübid.

– . . .

Page 31: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.2 Tüübid ja liigid

61

Üldist

Liigid klassifitseerivad tüüpe nende olemuse järgi.

– Andmekogumid on liiki ∗.

– Mistahes liikide K ja L korral on olemas liik K → L.

K → L sisaldab tüübifunktsioonid, mis võtavad argumendikstüüpe liigist K ja annavad välja tüüpe liigist L.

Iga tüüp kuulub ainult ühte liiki.

2 Haskelli maailm

2.2 Tüübid ja liigid

62

Tuttavate tüüpide liigid

• Nt Int, Integer, Float, Double, Bool, Ordering on kõik liiki ∗.

• Nt List, Maybe, IO on liiki ∗ → ∗.

– Kuid iga tüübi A korral liigist ∗ kujutavad ListA, MaybeA, IOAendast tüüpe liigist ∗.

Page 32: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.3 Tüübid ja klassid

63

Tüübid ja klassid

2 Haskelli maailm

2.3 Tüübid ja klassid

64

Üldist

Klassid klassifitseerivad tüüpe programmeerija suva järgi.

– Oluline on teatavate muutujate (nn klassi meetodite) defineeritustüübi jaoks.

– Samma klassi kuuluvad tüübid peavad olema sama liiki.

– Sama tüüp võib kuuluda mitmesse klassi.

Page 33: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.3 Tüübid ja klassid

65

Eeldefineeritud klassid

• Eq sisaldab tüübid, mille andmetel saab kontrollida võrdust.

– Funktsioonide ja protseduuride võrdus vaikimisi defineerimata.

– Struktuuridel võrdus vaikimisi komponenthaaval (eeldusel, etkomponenditüübid kuuluvad klassi Eq).

• Ord sisaldab tüübid, mille andmetel saab kontrollida järjestust (nõu-tav ühtlasi kuuluvus klassi Eq).

– Struktuuridel järjestus vaikimisi leksikograafiline (eeldusel, etkomponenditüübid kuuluvad klassi Ord).

2 Haskelli maailm

2.3 Tüübid ja klassid

66

Eeldefineeritud klassid

• Show sisaldab tüübid, mille andmeid saab sõnena esitada.

– Funktsioonid ja protseduurid ei ole vaikimisi esitatavad.

– Struktuurid esituvad vaikimisi (eeldusel, et komponenditüübidkuuluvad klassi Show).

• Read sisaldab tüübid, mille andmeid saab sõnekujust sisse lugeda.

– Sarnased kitsendused klassiga Show.

Page 34: Sissejuhatus - courses.cs.ut.ee · Kõrgemat järku funktsioon on selline, mis võtab funktsiooni argu-mendiks. 2 Haskelli maailm 2.1 Andmed ja tüübid 54 Järk Teine võimalus defineerida

2 Haskelli maailm

2.3 Tüübid ja klassid

67

Eeldefineeritud klassid

• Num sisaldab arvulised tüübid (nõutav ühtlasi kuuluvus klassidesseEq ja Show).

• Integral, Fractional, Floating on Num alamklassid ja hõlmavadvastavalt täisarvutüübid, murdarvutüübid ja ujukomaarvutüübid.

• Enum sisaldab tüübid, mille andmed on kodeeritavad täisarvudega.

– Nt täisarvud ise, tõeväärtused, suurusvahekorrad, sümbolid.

• Bounded sisaldab tüübid, kus on olemas vähim ja suurim.

– Nt lühikeste täisarvude tüüp, tõeväärtusetüüp, suurusvahekorra-tüüp, sümbolitüüp.