815338A Ohjelmointikielten periaatteet

Koko: px
Aloita esitys sivulta:

Download "815338A Ohjelmointikielten periaatteet"

Transkriptio

1 815338A Ohjelmointikielten periaatteet VI Funktionaalinen ohjelmointi

2 Sisältö 1. Johdanto ja peruskäsitteitä 2. LISP- ja Scheme-kielet 3. Haskell 4. IO funktionaalisissa kielissä 5. Muita funktionaalisia kieliä 6. Funktionaalisten ja imperatiivisten kielten vertailua A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 2

3 VI.1. Johdanto ja peruskäsitteitä Vaihtoehtoja imperatiiviselle ja olioparadigmalle: Funktionaalinen ohjelmointi ja logiikkaohjelmointi Yleisnimi deklaratiivinen ohjelmointi Joissakin lähteissä vain logiikkaohjelmointi deklaratiivista Imperatiivisten ohjelmointikielten tunnusmerkit Perustuvat von Neumannin arkkitehtuuriin Fyysisiin muistipaikkoihin sidottujen muuttujien käyttö Sijoituslause Iteratiivisen toiston tehokas soveltaminen A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 3

4 VI.1. Johdanto ja peruskäsitteitä (2) Funktionaalinen ohjelmointi Luovutaan komennoista Suoritetaan operaatiot lausekkeita käyttämällä, erityisesti funktioita toistuvasti soveltamalla Funktiot peruselementtejä Vastaavat muuttujia imperatiivisessa ohjelmoinnissa Ei sijoituslausetta Toisto tyypillisesti rekursiolla Monissa funktionaalisissa kielissä imperatiivisia piirteitä A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 4

5 VI.1.1. Matemaattiset funktiot ja korkeamman asteen funktiot (higher order functions) Matemaattisella funktiolla ei voi olla sivuvaikutuksia Ero imperatiivisen ohjelmoinnin funktioon Ainoa toimenpide palauttaa argumenttia vastaava arvo, joka on aina samalla argumentin arvolla sama Korkeamman asteen funktioita kutsutaan myös funktionaalisiksi muodoiksi (functional forms) Voivat ottaa parametreikseen funktioita Paluuarvo voi olla funktio A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 5

6 VI.1.2. Tavallisia funktionaalisia muotoja Funktioiden yhdistäminen (kompositio) Funktioiden f ja g yhdistetty funktio h = f g; h(x) = f(g(x)) Esimerkki. Jos f(x) = x 2 ja g(x) = 2x+1, h(x) = f g(x) = f(g(x)) = f(2x+1) = (2x+1) 2 = 4x 2 + 4x A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 6

7 VI.1.2. Tavallisia funktionaalisia muotoja (2) *x++=*y++ Konstruktio saadaan soveltamalla annetun funktiolistan jokaista funktiota yhteen argumenttiin: saadaan arvojen lista, jossa on yhtä monta alkioita kuin funktioita oli listassa Esimerkki f(x) = 3x-1 ja g(x) = x 4 +2 [f,g](3) tuottaa listan (8,83) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 7

8 VI.1.2. Tavallisia funktionaalisia muotoja (3) Sovella kaikkiin: Sovelletaan samaa funktiota listan kaikkiin alkioihin Merkitään symbolilla α Esimerkki f(x) = x/3 -> operaation α(f,(1,2,3)) tuloksena (1/3,2/3,1) *x++=*y A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 8

9 VI.1.3 Funktionaalisen ohjelmoinnin peruskäsitteitä Viittauksen läpinäkyvyys (referential transparency): Funktio antaa samoilla parametreilla aina saman tuloksen Käytetään myös nimityksiä viite-eheys, viittausten läpikuultavuus Tiukka semantiikka (strict semantics) Funktiota ei evaluoida ennen kuin sen parametrit on täysin evaluoitu Noudatetaan yleensä imperatiivisissa ja useissa funktionaalisissa kielissä Ellei voimassa, semantiikka joustava (non-strict) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 9

10 VI.1.3 Funktionaalisen ohjelmoinnin peruskäsitteitä (2) Innokas evaluointi (eager evaluation) : funktion ja lausekkeen arvo lasketaan välittömästi sen parametrien kulloisillakin arvoilla Käytetään kaikissa imperativiisissa ja monissa funktionaalisissa kielissä Laiska evaluointi (lazy evaluation): lausekkeen arvo evaluoidaan vasta kun sitä tarvitaan ja evaluointi tapahtuu ainoastaan kerran Mahdollinen jos semantiikka joustava Mahdollistaa näennäisesti äärettömien rakenteiden kirjoittamisen A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 10

11 VI.2. LISP- ja Scheme-kielet VI.2.1 LISP *x++=*y++ John McCarthy: LISP vuonna 1958 MIT:n tekoälyprojektin yhteydessä Haluttiin kieli, jolla vahva matemaattinen pohja McCarthy: rekursiivisten funktioiden teoria soveltuu perustaksi paremmin kuin Turingin koneeseen perustuvat mallit Mahdollisuus listojen käsittelyyn Funktion käsitteen mahdollisimman laaja soveltaminen A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 11

12 VI.2.1 LISP (2) McCarthy: LISPin yleisfunktio eval, joka laskee minkä tahansa LISP-funktion arvon -> Ensimmäinen LISP tulkki kun huomattiin, että implementoituna voidaan käyttää tulkkina Ensimmäinen kääntäjä toteutettiin LISPillä Tiettävästi ensimmäinen kerta, kun kielen kääntäjä kirjoitetaan samalla kielellä LISPistä monia murteita, COMMON LISP ja Scheme yleisimmin käytössä Tässä esitettävät ominaisuudet koskevat myös Schemeä A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 12

13 VI LISPin symbolit Koostuvat kirjaimista, numeroista ja eräistä sallituista erikoismerkeistä Luvut eivät ole symboleja, koska ne aina edustavat ainoastaan numeerista arvoaan Symboleilla T ja NIL erikoismerkitys: T on totuusarvo tosi ja NIL epätosi Loogisissa lausekkeissa NIL on epätosi ja mikä tahansa siitä poikkeava arvo katsotaan todeksi Schemessä totuusarvot #t ja #f Symbolit ja luvut = atomit (atoms) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 13

14 VI LISPin perustietotyypit Atomit (atoms) ja listat (lists) Lista on järjestetty joukko, jonka alkiot ovat atomeja tai toisia listoja Listan rajoittimina toimivat kaarisulut ja alkioiden erottimina sanavälit Lista voi olla tyhjä, merkitään ( ) tai NIL Schemessä null Atomit ja listat = symboliset lausekkeet tai s- lausekkeet (s-expression) Listan ensimmäinen alkio on sen pää (head) ja kaikki loput sen häntä (tail) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 14

15 VI LISPin funktiot Kirjoitetaan listamuodossa (funktio parametri1 parametri2...) Noudattaa tiukkaa semantiikkaa Funktion nimi kirjoitetaan aina ensin Esimerkki. Operaatio 2+3 kirjoitetaan (+ 2 3) ja 3*4+5 (+ (* 3 4) 5) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 15

16 VI LISPin funktiot (2) QUOTE ( ) Lauseke LISP tulkille -> määrää lausekkeen arvon laskemalla uloimman funktion kutsun argumenttien arvot vasemmalta oikealle Jos halutaan lauseke sellaisenaan, merkitään lainaukseksi kirjoittamalla tai QUOTE lausekkeen eteen, esimerkiksi (+ 3 4) ei laske arvoa A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 16

17 VI.2.2 Scheme 1970-luvun puolivälissä syntynyt LISPin murre Pieni ja kompakti Syntaksi ja semantiikka yksinkertaisia Suunnittelussa minimalistinen idea Käytetty ohjelmoinnin opettamisessa A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 17

18 VI Funktioiden määrittely Schemessä *x++=*y++ Funktionaalisessa kielessä oltava mahdollisuus määritellä omia funktioita Lambda-lausekkeet Käytetään Schemessä funktioiden määrittelyyn (LAMBDA (x) (* x x)) Parametrien lista = lambda-lista Yleinen laskenta lambda-lauseen rungossa (yllä (* x x)) Abstrakti mekanismi funktion määrittelyä ja laskentaa varten; nimetön funktio, häviää kun muoto on laskettu -> tarvitaan mekanismi, jolla funktioon voidaan sitoa tunniste A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 18

19 VI Funktioiden määrittely Schemessä (2) Uusien funktioiden määrittely tapahtuu funktiolla define Esimerkki. Edellinen funktio voidaan määritellä (define nelio (x) (* x x) ) -> voidaan ohjelmassa kutsua nimellä: (nelio 5) -> 25 *x++=*y A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 19

20 VI Schemen kontrollirakenteet Muistuttavat ulkoisesti funktiokutsuja Sulkulausekkeita: ensimmäinen termi ohjausrakenteen nimi; seuraavat ikään kuin funktion argumentteja, joihin rakennetta sovelletaan Rakenteen laskennan tuloksena jokin arvo kuten funktioilla A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 20

21 VI Schemen kontrollirakenteet (2) if-lause Kahden vaihtoehdon ehtolause, muoto: (if ehto tosi-muoto epätosi-muoto) Esimerkki. Kertoma-funktio (define (kertoma n) (if (<= n 1) 1 (* n (kertoma (- n 1))))) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 21

22 VI Schemen kontrollirakenteet (3) cond-lause: monivalintarakenne Haarauttaa laskentaa predikaattien määrittelemien ehtojen nojalla, lauseen muoto: (cond (p1 a1) (p2 a2) (pn an) (else a)) Predikaatit pi ja arvolausekkeet ai ja a mielivaltaisia muotoja Arvoksi ensimmäistä tosi-arvoista predikaattia vastaava arvo tai elseä vastaava arvo. Else ei pakollinen -> lauseen arvo voi olla epämääräinen A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 22

23 VI Schemen kontrollirakenteet (4) Esimerkki cond-lauseesta: Fibonaccin lukuja palauttava funktio (define (fibo n) (cond ((= n 0) 0) )) ((= n 1) 1) (else (+ (fibo (- n 1)) (fibo (- n 2)))) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 23

24 VI Schemen listankäsittelyfunktioita Listojen käsittelyn neljä alkeisfunktiota car, cdr, cons, ja list car ja cdr listan purkufunktioita car palauttaa argumenttina saadun listan pään ja cdr listan hännän -> Funktion car paluuarvo on s- lauseke ja funktion CDR paluuarvo lista Esimerkki (car (a b c d) ) -> s-lauseke a ja (cdr (a b c d) ) -> lista (b c d) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 24

25 VI Schemen listankäsittelyfunktioita (2) cons ja list listan muodostajia cons lisää ensimmäisen argumentin toisen listaargumentin alkuun. Esimerkiksi (cons 'C '(A B)) -> lista (C A B) *x++=*y++ list muodostaa listan parametreistansa. Esimerkiksi (list 'C '(A B) 'D) -> lista (C (A B) D) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 25

26 VI Schemen listankäsittelypredikaatteja eq?, null? ja list? Schemen listojen käsittelyn alkeispredikaatit list? : Onko parametri lista vai ei null? : Onko parametrilista tyhjä vai ei eq? : Vertailee ovatko parametrisymbolit samat. Ei toimi järkevästi listoille *x++=*y A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 26

27 VI Scheme-esimerkkejä Tehtävä: Kirjoita funktio onko_jasen, joka päättelee, onko parametrina saatu alkio toisena parametrina saadun listan alkio. Paluuarvona #t tai #f. Ratkaisun idea: Jos lista on tyhjä palautetaan #f Jos alkio löytyy listan päästä #t Muuten kutsutaan samaa funktiota listan häntä parametrina -> Lista lyhenee -> Rekursio päättyy A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 27

28 VI Scheme-esimerkkejä (2) Ratkaisufunktio: (define (onko_jasen x lista) (cond ((null? lista) #f) ((eq? (car lista) x) #t) (else (onko_jasen x (cdr lista))) )) Esimerkkejä toiminnasta: (onko_jasen 'a '(b a c)) -> #t (onko_jasen 'a '(b (a c) d)) -> #f Ei tutki sisältyykö alilistoihin A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 28

29 VI Scheme-esimerkkejä (3) Tehtävä: Kirjoita funktio litista, joka litistää parametrina saadun listan, ts. poistaa kaikki muut paitsi uloimmat sulut. Apuna voi käyttää Schemen varusfunktiota append, joka yhdistää parametreinaan saadut kaksi listaa Ratkaisuidea: Jos lista on tyhjä, palautetaan tyhjä lista Jos parametri on atomi, siitä muodostetaan yksialkioinen lista Muuten litistetään listan ensimmäinen alkio ja listan häntä sekä yhdistetään saadut listat Sovelletaan lyheneviin listoihin -> rekursio päättyy A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 29

30 VI Scheme-esimerkkejä (4) Ratkaisufunktio: (define (litista lista) (cond ((null? lista) '() ) ((not (list? lista)) (cons lista '())) (else (append (litista (car lista)) (litista (cdr lista)))))) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 30

31 VI.3. Haskell Julkaistu vuonna 1987 Nimetty matemaatikko Haskell Brooks Curryn mukaan Puhtaasti funktionaalinen kieli Ehkä yleisin käytössä Vahva tyypitys Laiska evaluointi Syntaksi muistuttaa ML-kieltä Yhteisiä piirteitä ML:n kanssa vahva tyypitys ja moduulirakenne Toteutuksia vapaasti saatavilla A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 31

32 VI.3.1 Haskellin funktiot Voidaan määritellä hahmontunnistuksella Esimerkki. Kertoma-funktio kertoma 0 = 1 kertoma n = n * kertoma(n-1) Ehtolauseen käyttäminen määrittelyssä kertoma(n) = if n == 0 then 1 else n*kertoma(n-1) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 32

33 VI.3.1 Haskellin funktiot (2) Esimerkki. Vaihtoehtorakenteen käyttö Fibonacci-lukuja laskevan funktion määrittelyssä fibo n n == 0 = 0 n == 1 = 1 n > 1 = fibo(n-1)+fibo(n-2) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 33

34 VI.3.1 Haskellin listat Esitetään hakasulkeiden sisällä, alkiot pilkulla erotettuna suunnat = [ N, S, E, W ] Listojen yhdistäminen: operaattori ++ [1,4,5] ++ [2,6,8] -> [1,4,5,2,6,8] Kaksoispisteellä merkitään osa listasta -> Funktio joka palauttaa listan pituuden pituus [] = 0 pituus(x:xs) = 1 + pituus(xs) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 34

35 VI.3.1 Haskellin listat (2) Listakehitelmillä (list comprehensions) voidaan määritellä listoja. Muoto [runko määreet] Esimerkki. Lista [1,4,9,16,,400] [n*n n <- [1..20]] Laiskan evaluoinnin ansiosta voi olla potentiaalisesti ääretön: parilliset = [2, 4..] neliot = [n*n n <- parilliset] Listassa periaatteessa kaikkien parillisten lukujen neliöt. Listaa muodostetaan käytettäessä niin pitkälle kuin tarvitaan A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 35

36 VI.3.2 Haskell-esimerkkejä Kirjoita Haskell-funktio, joka lajittelee listan Quicksortalgoritmilla Ratkaisu: Quicksort lajittelee listan hakemalla listan ensimmäiselle alkiolle oikean paikan listassa ja lajittelemalla rekursiivisesti vasemman ja oikean puolen -> ratkaisufunktio q_sort [] = [] q_sort (x:xs) = q_sort [z z <- xs, z <= x] ++ [x] ++ q_sort [z z <- xs, z > x] A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 36

37 VI.3.2 Haskell-esimerkkejä (2) Kirjoita Haskell-funktio, joka tutkii, onko syötejono palindromi, kun jonosta poistetaan valkomerkit eikä tehdä eroa isojen ja pienten kirjainten välillä Ratkaisu: Käytetään apuna Haskell-funktioita isalpha, joka tutkii onko merkki kirjain ja tolower joka muuttaa kirjainmerkin pieneksi. Näiden, sekä Haskell-funktioiden filter ja map avulla puhdistetaan syöte ja tutkitaan onko puhdistettu syöte käännettynä sama kuin puhdistettu syöte A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 37

38 VI.3.2 Haskell-esimerkkejä (3) Palindromin testaus -- tuodaan merkkifunktiot import Data.Char (tolower,isalpha) putsaa str = filter isalpha str pieneksi str = map tolower str kaanna [] = [] kaanna (x:xs) = kaanna(xs) ++ [x] -- varsinainen testifunktio onkopalindromi str = (m_str == (kaanna m_str)) where m_str = pieneksi (putsaa str) A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 38

39 VI.4. IO funktionaalisissa kielissä Sivuvaikutuksien takia IO:n toteuttaminen funktionaalisessa ohjelmoinnissa periaatteessa hankalaa Yleisimmin tietovirtojen (streams) avulla Virta laiskasti evaluoitava rajoittamattoman pituinen lista: kun tarvitaan syötettä, evaluoidaan listan pää Haskellissa listojen alkiot samaa tyyppiä -> erityyppisten syötteiden käsittely ongelmallista Haskellissa monadijärjestelmä: toimintoja (actions) voidaan ketjuttaa ja liittää niihin piilotettu tila Joissakin kielissä (esim. Clean) tyyppijärjestelmää laajennettu Uniqueness types: voidaan viitata vain kerran A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 39

40 VI.5. Muita funktionaalisia kieliä COMMON LISP (1984) Yhdistelmä LISPin murteista -> varsin laaja Sekä dynaaminen että staattinen näkyvyysalueen määräytyminen ML (MetaLanguage, 1973) Syntaksi muistuttaa enemmän Pascalia kuin LISPiä Sisältää imperatiivisia piirteitä Tyypit voidaan esitellä tai määräytyvät implisiittisesti Vahvasti tyypitetty staattinen tyypintarkistus -> luotettavuus ja tehokkuus lisääntyvät Moduuliominaisuus -> abstraktit tietotyypit A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 40

41 VI.5. Muita funktionaalisia kieliä (2) F# (2005) Kuuluu MS:n.NET-perheeseen Sisältää imperatiivisia piirteitä Tukee olio-ohjelmointia Funktiot muistuttavat Haskellin funktioita A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 41

42 VI.6 Funktionaalisten ja imperatiivisten kielten vertailua *x++=*y++ Kielen syntaksi ja semantiikka funktionaalisissa kielissä yksinkertaisempi Kiistanalaista kumman paradigman ohjelmointi tuottavampaa Todennäköisesti riippuu sovelluskohteesta Imperatiiviset ohjelmat tehokkaampia Ero ei kaikissa sovelluksissa merkittävä Luettavuus: Funktionaalinen koodi yleensä helpommin tulkittavissa Suuri suosioero imperatiivisten kielten hyväksi ehkä tottumuskysymys? A Ohjelmointikielten periaatteet, Funktionaalinen ohjelmointi 42

Funktionaalinen ohjelmointi

Funktionaalinen ohjelmointi Funktionaalinen ohjelmointi Aiemmin on käsitelty nykyohjelmoinnin suosituimpia ohjelmointiparadigmoja: imperatiivista ohjelmointia ja olio-ohjelmointia. Tässä osassa perehdytään funktionaaliseen ohjelmointiin

Lisätiedot

Funktionaalinen ohjelmointi

Funktionaalinen ohjelmointi Funktionaalinen ohjelmointi Aiemmin on käsitelty nykyohjelmoinnin suosituimpia ohjelmointiparadigmoja: imperatiivista ohjelmointia ja olio-ohjelmointia. Tässä osassa perehdytään funktionaaliseen ohjelmointiin

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 7: Funktionaalista ohjelmointia (mm. SICP 3.5) Riku Saikkonen 13. 11. 2012 Sisältö 1 Laiskaa laskentaa: delay ja force 2 Funktionaalinen I/O 3 Funktionaalista

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Pienen ohjelmointikielen tulkki (ohjelmoitava laskin) (mm. SICP 4-4.1.5 osin) Riku Saikkonen 15. 11. 2012 Sisältö 1 Nelilaskintulkki, globaalit muuttujat

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Funktionaalista ohjelmointia: todistamisesta, virrat ja I/O, hahmonsovitus (mm. SICP 3.5) Riku Saikkonen 8. 11. 2011 Sisältö 1 Vähän funktionaalisten

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, todistamisesta (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 7. 11. 2011 Sisältö 1 Muuttujan arvon muuttaminen: set! 2 SICP-oliot

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, tietorakenteen muuttaminen (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 6. 11. 2012 Sisältö 1 Muuttujan arvon muuttaminen:

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: Symbolit, derivojaesimerkki, kierroksen 1 ratkaisut (mm. SICP 2.32.3.2) Riku Saikkonen 1. 11. 2011 Sisältö 1 Symbolit ja sulkulausekkeet 2 Lisää Schemestä:

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: Funktionaalinen listankäsittely ja listankäsittelyoperaatiot (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Listarakenteet

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Rajoite-esimerkki, funktionaalista ohjelmointia (mm. SICP 3.3.5, 3.5) Riku Saikkonen 8. 11. 2012 Sisältö 1 SICP 3.3.5 esimerkki: rajoitteiden vyörytysjärjestelmä

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 3: SICP kohdat 2.22.3, 33.1 ja 3.33.3.2 Riku Saikkonen 8. 11. 2010 Sisältö 1 Lisää listoista 2 Symbolit ja sulkulausekkeet 3 Derivoijaesimerkki 4 Muuttujan

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Tulkin muokkaaminen, sisäiset määrittelyt, makrot (mm. SICP 3.2.4, 4-4.1.6) Riku Saikkonen 29. 11. 2012 Sisältö 1 Kirjan tulkin muokkaaminen 2 Yksityiskohta:

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 4: SICP kohta 3.3.5 ja funktionaalista ohjelmointia Riku Saikkonen 15. 11. 2010 Sisältö 1 Ensimmäisen kierroksen tehtävistä 2 SICP 3.3.5: rajoitteiden

Lisätiedot

Laiska laskenta, korekursio ja äärettömyys. TIEA341 Funktio ohjelmointi Syksy 2005

Laiska laskenta, korekursio ja äärettömyys. TIEA341 Funktio ohjelmointi Syksy 2005 Laiska laskenta, korekursio ja äärettömyys TIEA341 Funktio ohjelmointi Syksy 2005 Muistatko graafinsievennyksen? DAG esitys ja graafinsievennys DAG esitys Lausekkeen rakennepuu, jossa yhteiset alilausekkeet

Lisätiedot

Funktionaalinen ohjelmointi

Funktionaalinen ohjelmointi hyväksymispäivä arvosana arvostelija Funktionaalinen ohjelmointi Eeva Terkki Helsinki 10.12.2012 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY

Lisätiedot

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet Koka Ryhmä 11 Juuso Tapaninen, Akseli Karvinen 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet 1 1. Taustoja Koka on Daan Leijenin ja Microsoft:n kehittämä

Lisätiedot

Mitä funktionaalinen ohjelmointi on

Mitä funktionaalinen ohjelmointi on Funktionaalinen ohjelmointi Mitä funktionaalinen ohjelmointi on - Funktionaalisessa ohjelmoinnissa mallinnus keskittyy löytämään ongelmasta sellaisia tiedon muunnoksia, jotka voidaan esittää matemaattisina

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA341 Funktio-ohjelmointi 1, kevät 2008 Luento 9 Kombinaattoreista Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 21. tammikuuta 2008 Currying Haskell-funktio ottaa aina vain yhden

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot 4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA341 Funktio-ohjelmointi 1, kevät 2008 Luento 10 Todistamisesta Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 21. tammikuuta 2008 Samuuden todistaminen usein onnistuu ihan laskemalla

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Tulkki: proseduurit, abstrakti syntaksi, quote ja cond (mm. SICP 44.1.5 osin) Riku Saikkonen 15. 11. 2011 Sisältö 1 Argumentittomat proseduurit ja käyttöliittymä

Lisätiedot

Luku 3. Listankäsittelyä. 3.1 Listat

Luku 3. Listankäsittelyä. 3.1 Listat Luku 3 Listankäsittelyä Funktio-ohjelmoinnin tärkein yksittäinen tietorakenne on lista. Listankäsittely on paitsi käytännöllisesti oleellinen aihe, se myös valaisee funktio-ohjelmoinnin ideaa. 3.1 Listat

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Scheme-kesäkurssi luento 2

Scheme-kesäkurssi luento 2 Scheme-kesäkurssi luento 2 Timo Lilja 1. 7. 2009 Sisältö 1 SICP luku 3 2 Makrot 3 Gambit Sijoitus ja tila SICP 3.1 olioilla on paikallinen tila, jota mallinnetaan tilamuuttujilla Scheme-kielessä on sijoitusoperaattori

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Tulkin muokkaus, makrot, ohjelmia muokkaavat ohjelmat (mm. SICP 3.2.4, 4-4.1.6) Riku Saikkonen 22. 11. 2011 Sisältö 1 Kirjan tulkin muokkaaminen 2

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA34 Funktio-ohjelmointi, kevät 2008 Luento 3 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 2. tammikuuta 2008 Ydin-Haskell: Syntaksi Lausekkeita (e) ovat: nimettömät funktiot: \x

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19 Ohjelmointikieli TIE-20306 Principles of Programming Languages Syksy 2017 Ryhmä 19 Juho Kärnä Ville Mäntysaari 1. Johdanto D on yleiskäyttöinen, strukturoitu, staattisesti tyypitetty, käännettävä ohjelmointikieli

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 9: Makrot ja dynaaminen sidonta Riku Saikkonen 7. 12. 2010 Sisältö 1 Makrot 2 Pieni esimerkki abstraktion tekemisestä 3 Dynaaminen sidonta Mikä on makro?

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

Scheme-kesäkurssi luento 5

Scheme-kesäkurssi luento 5 Scheme-kesäkurssi luento 5 Timo Lilja 29. 7. 2009 Sisältö 1 Rekisterikonekielen simulaattori 2 Muistinhallinta 3 Rekisterikonekielinen Scheme-tulkki 4 Kääntäjä Rekisterikonekielen simulaattori (SICP 5.2)

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VII Logiikkaohjelmointi Sisältö 1. Johdanto 2. Predikaattilogiikan käsitteistöä 3. Prolog 815338A Ohjelmointikielten periaatteet, Logiikkaohjelmointi 2

Lisätiedot

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä TIE-20306 Principles of Programming Languages Seminaariesityksen essee Ryhmä 18: Heidi Vulli, Joni Heikkilä SISÄLLYSLUETTELO 1. Johdanto... 1 2. Ohjelmointikielen perusperiaatteet... 1 2.1 Paradigmat...

Lisätiedot

Jatkeet. TIES341 Funktio ohjelmointi 2 Kevät 2006

Jatkeet. TIES341 Funktio ohjelmointi 2 Kevät 2006 Jatkeet TIES341 Funktio ohjelmointi 2 Kevät 2006 Havainto: häntäkutsu (1) Funktiokutsun yleinen toimintaperiaate: (koskee vain täysiä kutsuja, ts. jotka eivät palauta funktiota) kutsuja kirjaa pinoon paluuosoitteen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Paikalliset muuttujat, kirjan tulkki kokonaisuutena (mm. SICP 3.2, 4.1.24.1.6) Riku Saikkonen 22. 11. 2012 Sisältö 1 Ympäristöt: miten paikalliset

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages Tampere University of Technology Department of Pervasive Computing TIE-20306 Principles of Programming Languages Ruby Ryhmä 8 Juho Rintala Sami Paukku Sisällysluettelo 1 Johdanto... 3 2 Paradigma... 3

Lisätiedot

Scheme-kesäkurssi luento 3

Scheme-kesäkurssi luento 3 Scheme-kesäkurssi luento 3 Riku Saikkonen 6. 7. 2009 Sisältö 1 Nelilaskin 2 Muuttujat 3 Ympäristöt 4 Scheme-tulkki 5 Kontinuaatiot 6 CPS Miksi SICP-kirjassa on Scheme-tulkkeja? tulkin näkeminen auttaa

Lisätiedot

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A. Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 I Johdanto Sisältö 1. Ohjelmointikielen määritelmä 2. Syitä tutkia ohjelmointikieliä 3. Ohjelmointiparadigmat 4. Suunnittelu- ja arviointikriteerit 5. Suunnitteluun

Lisätiedot

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011 TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2011 Sisällys Sisällys Ohjelmointikieli? programming language n. a

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: Funktioiden käyttöä, lisää Schemestä, listat (mm. SICP 1.31.3.4, osin 22.2.3) Riku Saikkonen 17. 10. 2011 Sisältö 1 Scheme-ohjelmointikäytäntöjä 2 Funktiot

Lisätiedot

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi Imperatiivisen ohjelmoinnin peruskäsitteet muuttuja muuttujissa oleva data voi olla yksinkertaista eli primitiivistä (esim. luvut ja merkit) tai rakenteista jolloin puhutaan tietorakenteista. puhuttaessa

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Clojure, funktionaalinen Lisp murre

Clojure, funktionaalinen Lisp murre Clojure, funktionaalinen Lisp murre Principles of Programming Languages, S2015 Jukka Pekka Venttola & Pietari Heino Taustaa Clojuren pohjana on käytetty Lisp ohjelmointikieltä, jonka historia ulottuu 1950

Lisätiedot

Scheme-kesäkurssi luento 1

Scheme-kesäkurssi luento 1 Scheme-kesäkurssi luento 1 Riku Saikkonen 24. 6. 2009 Sisältö 1 Kurssi 2 Scheme-kieli 3 SICP luku 1 4 SICP luku 2 Kurssijärjestelyt T-106.6200 Ohjelmistotekniikan erikoiskurssi, 68 op Kurssikirja: Abelson,

Lisätiedot

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia Antti-Juhani Kaijanaho 16. helmikuuta 2009 Tyypitetyt ohjelmointikielet sisältävät paljon muitakin konstruktioita kuin yksinkertaisesti tyypitetyn lambda-kielen,

Lisätiedot

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010 kielenä 9. joulukuuta 2010 Historia kielenä Historia Sovelluksia kehitettiin vuonna 1972 Kehittäjinä ranskalaiset Pääkehittäjä Alain Colmerauer Philippe Roussel programmation en logique Robert Kowalski

Lisätiedot

Chomskyn hierarkia. tyyppi 0 on juuri esitelty (ja esitellään kohta lisää) tyypit 2 ja 3 kurssilla Ohjelmoinnin ja laskennan perusmallit

Chomskyn hierarkia. tyyppi 0 on juuri esitelty (ja esitellään kohta lisää) tyypit 2 ja 3 kurssilla Ohjelmoinnin ja laskennan perusmallit Chomskyn hierarkia Noam Chomskyn vuonna 1956 esittämä luokittelu kieliopeille niiden ilmaisuvoiman mukaan tyyppi kieli kielioppi tunnistaminen 0 rekurs. lueteltava rajoittamaton Turingin kone 1 kontekstinen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 1: Rekursiivinen ajattelutapa, Scheme-kielen perusteita (mm. SICP 11.2.4) Riku Saikkonen 10. 10. 2011 Sisältö 1 Kurssijärjestelyitä 2 Perusteita Scheme-kielestä,

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

Lisätiedot

Rekursiiviset tyypit

Rekursiiviset tyypit Rekursiiviset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 20. helmikuuta 2007 Hiloista Kiintopisteet (Ko)rekursio Rekursiiviset

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Tämän vuoksi kannattaa ottaa käytännöksi aina kirjoittaa uuden funktion tyyppi näkyviin, ennen kuin alkaa sen määritemää kirjoittamaan.

Tämän vuoksi kannattaa ottaa käytännöksi aina kirjoittaa uuden funktion tyyppi näkyviin, ennen kuin alkaa sen määritemää kirjoittamaan. 3.1. LISTAT 35 destaan pisteittäisesti: init :: [α] [α] init (x : []) = [] init (x : xs) = x : init xs Varuskirjastoon kuuluu myös funktiot take ja drop, jotka ottavat tai tiputtavat pois, funktiosta riippuen,

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Esittelyluento 2: Scheme-ohjelmointikieli ja mihin se on hyvä Riku Saikkonen 5. 10. 2010 Sisältö 1 Scheme-kielen pikaesittely 2 Kurssin käyttämästä kielestä 3

Lisätiedot

Haskell ohjelmointikielen tyyppijärjestelmä

Haskell ohjelmointikielen tyyppijärjestelmä Haskell ohjelmointikielen tyyppijärjestelmä Sakari Jokinen Helsinki 19. huhtikuuta 2004 Ohjelmointikielten perusteet - seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 1 Johdanto 1 Tyyppien

Lisätiedot

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 26. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 26. kesäkuuta 2013 ja ja TIEA241 Automaatit ja kieliopit, kesä 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 26. kesäkuuta 2013 Sisällys ja ja on yksi vanhimmista tavoista yrittää mallittaa mekaanista laskentaa. Kurt

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 1: Rekursiivinen ajattelutapa, Scheme-kielen perusteita (mm. SICP 11.2.4) Riku Saikkonen 16. 10. 2012 Sisältö 1 Kurssijärjestelyitä 2 Perusteita Scheme-kielestä,

Lisätiedot

Lisää pysähtymisaiheisia ongelmia

Lisää pysähtymisaiheisia ongelmia Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 10.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 10.2.2010 1 / 43 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

Lisätiedot

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015 Groovy Samuli Haverinen, Aki Hänninen 19. marraskuuta 2015 Groovy on oliokieli Java-alustalle (käännetään/tulkataan Java-tavukoodiksi), jonka syntaksi on hyvin Java-ystävällinen ja jota voidaan käyttää

Lisätiedot

Luku 5. Monadit. 5.1 Siirrännän ongelma

Luku 5. Monadit. 5.1 Siirrännän ongelma Luku 5 Monadit There are lots of books about functional programming in Haskell. They tend to concentrate on the beautiful core of functional programming: higher order functions, algebraic data types, polymorphic

Lisätiedot

Demo 7 ( ) Antti-Juhani Kaijanaho. 9. joulukuuta 2005

Demo 7 ( ) Antti-Juhani Kaijanaho. 9. joulukuuta 2005 Demo 7 (14.12.2005) Antti-Juhani Kaijanaho 9. joulukuuta 2005 Liitteenä muutama esimerkki Ydin-Haskell-laskuista. Seuraavassa on enemmän kuin 12 nimellistä tehtävää; ylimääräiset ovat bonustehtäviä, joilla

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

Yhteydettömät kieliopit [Sipser luku 2.1]

Yhteydettömät kieliopit [Sipser luku 2.1] Yhteydettömät kieliopit [ipser luku 2.1] Johdantoesimerkkinä tarkastelemme kieltä L = { a n b m a n n > 0, m > 0 }, joka on yhteydetön (mutta ei säännöllinen). Vastaavan kieliopin ytimenä on säännöt eli

Lisätiedot

14.1 Rekursio tyypitetyssä lambda-kielessä

14.1 Rekursio tyypitetyssä lambda-kielessä Luku 14 Rekursiiviset tyypit Edellisessä luvussa esitetyt tietue- ja varianttityypit eivät yksinään riitä kovin mielenkiintoisten tietorakenteiden toteuttamiseen. Useimmissa ohjelmissa tarvitaan erilaisia

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA341 Funktio-ohjelmointi 1, kevät 2008 Luento 14: Monadit Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 21. tammikuuta 2008 Tyyppien tyypit eli luonteet engl. kind tyyppinimet, kuten

Lisätiedot

Vaihtoehtoinen tapa määritellä funktioita f : N R on

Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: 1 (Alkuarvot) Ilmoitetaan funktion arvot

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: Rekursio Funktio f : N R määritellään yleensä

Lisätiedot

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

on rekursiivisesti numeroituva, mutta ei rekursiivinen. 6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli H = { M pysähtyy syötteellä w} on rekursiivisesti numeroituva, mutta ei rekursiivinen. Todistus. Todetaan ensin, että kieli H on rekursiivisesti

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos Geneeriset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 6. maaliskuuta 2007 Kysymys Mitä yhteistä on seuraavilla funktioilla?

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Olioiden toteuttaminen Riku Saikkonen 28. 11. 2011 Sisältö 1 Miten oliot ja metodikutsut toimivat? 2 Oliot Minkä luokan metodia kutsutaan? Python-esimerkki

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. tammikuuta 2012 Sisällys Sisällys Muistathan A B -konstruktion 0 k 1 i 2 s 3 s 4 a 5 0 k 1 o 2 i 3 r 4

Lisätiedot

Python-ohjelmointi Harjoitus 5

Python-ohjelmointi Harjoitus 5 Python-ohjelmointi Harjoitus 5 TAVOITTEET Kerrataan silmukkarakenteen käyttäminen. Kerrataan jos-ehtorakenteen käyttäminen. Opitaan if else- ja if elif else-ehtorakenteet. Matematiikan sisällöt Tehtävät

Lisätiedot

Scheme-kesäkurssi luento 4

Scheme-kesäkurssi luento 4 Scheme-kesäkurssi luento 4 Riku Saikkonen 8. 7. 2009 Sisältö 1 Laiska tulkki 2 Amb-tulkki 3 Logiikkatulkki 4 Rekisterikone Laiska evaluointi (SICP 4.2.1) laiska evaluointi (lazy, normal-order, non-strict):

Lisätiedot