815338A Ohjelmointikielten periaatteet
|
|
- Tapani Ketonen
- 7 vuotta sitten
- Katselukertoja:
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 Aiemmin on käsitelty nykyohjelmoinnin suosituimpia ohjelmointiparadigmoja: imperatiivista ohjelmointia ja olio-ohjelmointia. Tässä osassa perehdytään funktionaaliseen ohjelmointiin
LisätiedotFunktionaalinen ohjelmointi
Funktionaalinen ohjelmointi Aiemmin on käsitelty nykyohjelmoinnin suosituimpia ohjelmointiparadigmoja: imperatiivista ohjelmointia ja olio-ohjelmointia. Tässä osassa perehdytään funktionaaliseen ohjelmointiin
Lisätiedot815338A 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ätiedot815338A 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedot815338A 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ätiedotOhjelmoinnin 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ätiedotLaiska 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ätiedotFunktionaalinen 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ätiedotKoka. 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ätiedotMitä 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ätiedotTIEA341 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ätiedottää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ätiedot811120P 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ätiedot811120P 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ätiedotTIEA341 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ätiedotOhjelmoinnin 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ätiedotLuku 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ätiedot811120P 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ätiedotScheme-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ätiedotOhjelmoinnin 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ätiedotTIEA341 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ätiedotOhjelmoinnin 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ätiedotOhjelmointikieli 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ätiedotOhjelmoinnin 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ätiedotAlgebralliset 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ätiedotLuento 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ätiedotScheme-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ätiedot815338A 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ätiedotTIE 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ätiedotJatkeet. 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotTietorakenteet 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ätiedotRuby. 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ätiedotScheme-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ätiedotSe 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ätiedot815338A 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ätiedot815338A 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ätiedotTIEA255 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ätiedotTutoriaalilä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ätiedotOhjelmoinnin 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ätiedotImperatiivisen 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ätiedotTietorakenteet 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ätiedotITKP102 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ätiedotClojure, 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ätiedotScheme-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ätiedotTIES542 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ätiedotProlog 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ätiedotChomskyn 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotITKP102 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ätiedot815338A 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ätiedot815338A 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ätiedotTietueet. 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ätiedotOlio-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ätiedotRekursiiviset 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ätiedotOhjelmoinnin 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ätiedotTä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ätiedotAlkuarvot 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ätiedotOhjelmoinnin 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ätiedotHaskell 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ätiedotTIEA241 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ätiedotOhjelmoinnin 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ätiedotLisää 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedot1. 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ätiedotOhjelmoinnin 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ätiedotGroovy. 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ätiedotLuku 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ätiedotDemo 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ätiedotITKP102 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ätiedotYhteydettö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ätiedot14.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ätiedotTIEA341 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ätiedotVaihtoehtoinen 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ätiedotELM 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ätiedotRekursio. 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ätiedoton 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ätiedotOhjelmoinnin 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ätiedotJava-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ätiedotGeneeriset 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ätiedotOhjelmoinnin 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ätiedotOhjelmoinnin 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ätiedotTIEA241 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ätiedotPython-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ätiedotScheme-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