TIES341 Funktio-ohjelmointi 2 Kevät 2006

Slides:



Advertisements
Samankaltaiset esitykset
SANAJÄRJESTYS.
Advertisements

Visuaalinen analytiikka Case: Alkon myymälöiden segmentointi
Sisältö: Johdanto kryptografiaan Salakirjoitus
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
2. Vuokaaviot.
Erilaiset liitokset FROM-osassa voidaan määritellä relaatio myös erilaisia liitosoperaatioita käyttäen Vasen, oikea ja täysi puoliliitos eli ulkoliitos.
IML LEVEL 1 FINNISH Tervetuloa!. Tavoite Introduce new words for transport and traffic signs Role-play Review directions Learn how to hire a car.
Muuttujat ja vakiottMyn1 Muuttujat ja vakiot PHP-kielen syntaksi on lainattu suurimmaksi osaksi C- kielestä. PHP on erityisesti HTML-dokumenttien sisään.
XNA peliohjelmointi. XNA Perustuu Microsoftin kehittämään.NET- arkkitehtuuriin ja C#-kieleen. XNA:lla tehdyt pelit toimivat Windows ja XBOX360-alustoilla.
ENA1 Today’s Special. Muotoseikkoja koko nimi oikeaan yläkulmaan, myös ryhmä otsikkoon numero; ei alleviivausta kolme tekstikappaletta älä tee mitään.
RAKENNUSPALIKOITA SEINÄJOEN KANSALAISOPISTO Jussi Rasku Aki Sirviö.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
Substantiivit Substantiivit ovat jonkin ihmisen, eläimen, asian tai esineen nimityksiä. - a pupil - a horse - an orange - a chair - time - history.
Ohjelmointi 1. toinen luento1 Taulukot n Kiinteät taulukot: alkioiden määrä tiedetään Dim intCount(12) As Integer 0 indeksit saavat arvoja 0-12 (Option.
Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola.
SoberIT Ohjelmistoliiketoiminnan ja –tuotannon instituutti TEKNILLINEN KORKEAKOULU T Käyttöliittymien ja käytettävyyden seminaari Kontekstiherkkyydestä.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Tietoliikennetekniikan jatko- opintokurssi 2 Unix Network Programming The Sockets Networking API Chapter 1 - Introduction.
Finský intensivní Titta Hänninen.  1. What is the capital of Finland? ◦ Mikä on Suomen pääkaupunki? ◦ Helsinki on Suomen pääkaupunki.  2.
Vakiintuneet kustantajat ja uudet yrittäjät OA-monografiamaailmassa
Monadit TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Pilkku Kotilainen, Liedes, Luttinen, Meriläinen.  Pääsääntönä on, että virkkeen lauseet erotetaan toisistaan yleensä pilkulla.  Päälause erotetaan sivulauseesta.
1 Opinto-ohjaus Kurssi 1 Kotkan Aikuislukio. Kotkan aikuislukio Kirkkokatu Kotka.
Aloitusluento TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Abstraktit tietotyypit – jatkoa TIEA341 Funktio-ohjelmointi 1 Syksy 2005.
Abstraktit tietotyypit TIEA341 Funktio-ohjelmointi 1 Syksy 2005.
Lisää laskentoa TIEA341 Funktio-ohjelmointi 1 Syksy 2005.
Olio-ohjelmoinista lyhyesti. 2.2 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen.
Uusi näkökulma TIEA341 Funktio-ohjelmointi 1 Syksy 2005.
CADS Piirto-ohjelma Katselu- ja tulostusohjelma. Käytämme siis piirto-ohjelmaa Planner Client 16 TAI Planner Client 15, jos opettaja niin sanoo... Seuraavaksi.
Vuokaaviot. 2.2 Sisällys Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan toistaminen silmukalla. Esimerkkejä: − algoritmi.
Tyyppiluokat II ­ konstruktoriluokat, funktionaaliset riippuvuudet ­
3. Olio-ohjelmoinista lyhyesti
Relatiivipronominit Relative pronouns.
Laiska laskenta, korekursio ja äärettömyys
Procedural Language Extensions to SQL
PPJ Ruoholahti-Jätkäsaari 2007/2008
Monadeja siellä, monadeja täällä... monadeja kaikkialla?
Funktio-ohjelmointi ja Java
Verkoston ulkoisvaikutukset
Opettajaopinnot kahdessa aineessa
Poikkeustenkäsittelylohkot try-catch
Yhteenvetoa ja sovelluksia
DNS ja DHCP-palvelut linuxissa
2. Vuokaaviot.
8. Näppäimistöltä lukeminen
TIES341 Funktio-ohjelmointi 2 Kevät 2006
MyData – asiakas keskiöön
TIES341 Funktio-ohjelmointi 2 Kevät 2006
YLIOPISTOTENTTI / UNIVERSITY EXAM
Suomi 1B Torstai 14. huhtikuuta 2016.
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Foreach-toistolause foreach-rakenteella on kätevä käydä läpi kaikki taulukon alkiot. Erityisen kätevää se on hajautustaulukon tapauksessa, jossa taulukon.
Jatkumo TIES465 – TVT:n pedagogisen tuen kurssi ->
Suomi 1B
8. Näppäimistöltä lukeminen
Monilajimallit YE10.
JavaScriptin perusteet
Istuntojen hallinta PHP-sovelluksessa
YLEINEN TUKI TEHOSTETTU TUKI ERITYINEN TUKI YLEINEN TUKI
Arvorekursio: monadit solmuun
Articles a an the.
4. Attribuutit.
7. Hyvä ohjelmointitapa..
2. Vuokaaviot.
Vinkkejä juridiikan opiskeluun
Tervetuloa uuteen PowerPointiin
Gopro action-kamerat Hero 4 silver ja hero 2018.
Kari Systä Tampere University of Technology / Software Systems
Biokaasu osana ravinnekiertoa
Esityksen transkriptio:

TIES341 Funktio-ohjelmointi 2 Kevät 2006 Hughesin nuolet TIES341 Funktio-ohjelmointi 2 Kevät 2006

Lisälukemista John Hughes: “Generalising monads to arrows”, Science of Computer Programming, vol. 37 (2000) Ross Paterson: “A New Notation for Arrows”, Proc. ICFP 2001. Ross Paterson: “Arrows and computation”, Chapter 10 in Jeremy Gibbons & Oege de Moor (ed): The Fun of Programming. Palgrave, 2003. Anthony Courtney & Conal Elliott: “Genuinely Functional User Interfaces”, Proc. Haskell Workshop, 2001.

Monadien ongelma Koko monadisysteemi perustuu bind-operaatioon (>>=) peräkkäistys toimii ihan hyvin, jos ainoa mikä kiinnostaa on tuloksen “dynaamiset” ominaisuudet esim. komennon sivuvaikutukset esim. komennon paluuarvo ongelma: staattiset ominaisuudet selviävät yleensä vasta, kun komento suoritetaan useimmat staattiset ominaisuudet riippuvat jälkimmäisen(kin) osakomennon staattisista ominaisuuksista esim. jäsentimen FIRST-joukko

Nuoli Nuoli on tyyppikoostin, jonka kind on * -> *- > * ja jolla on tietyt operaatiot nuolet kuuluvat tyyppiluokkaan Arrow a b c, missä a on nuoli, tulkitaan seuraavasti: a b c on komento b on sen syöte c on sen tuloste mikä tahansa funktio kelpaa nuoleksi: arr :: Arrow a => (b -> c) -> a b c voidaan siis ajatella, että nuoli on funktion yleistys

Monadit ovat nuolia Jos meillä on monadi m, saamme siitä aikaiseksi ns. Kieslin nuolen: newtype Kiesli m b c = K (b -> m c) arr (K f) = K (\b -> return (f b)

Nuolien yhdistäminen Kuten funktioita, myös nuolia voidaan yhdistää: (>>>):: Arrow a => a b c -> a c d -> a b d Kiesli-nuolilla: K f >>> K g = K (\b -> f b >>= g)

Datan jakaminen Käsitellään vain osa syötteestä first :: Arrow a => a b c -> a (b,d) (c,d) Kieslin tapauksessa: first (K f) = K (\(b,d) -> f b >>= \c - return (c,d)) Peilikuva: second :: Arrow a => a b c -> a (d, b) (d, c) second f = arr swap >>> first f >>> arr swap Rinnakkainen käsittely: (***) :: Arrow a => a b c -> a d e -> a (b,d) (c,e) f *** g = first f >>> second g Syötteen jakaminen (&&&) :: Arrow a => a b c -> a b d -> a b (c,d) f &&& g = arr (\b -> (b,b)) >>> (f *** g)

Ehdolliset nuolet Valinta (oma tyyppiluokkansa) (|||) :: ArrowChoice a => a b d -> a c d -> a (Either b c) d Yksinkertaisempi: left :: ArrowChoice a => a b c -> a (Either b d) (Either c d) Kiesli: left (K f) = K g where g (Left b) = f b >>= \c -> return (Left c) g (Right d) = return (Right d)

Nuolten kutsuminen ArrowApply-tyyppiluokka app :: ArrowApply a => a (a b c, b) c syötteenä nuoli ja sen syöte suorita ko. nuoli ko. syötteellä ArrowApply-nuolet “ovat” myös monadeja: newtype ArrowMonad a c = M (a () c) instance ArrowApply a => Monad (ArrowMonad a) where return x = M (arr (\_ -> x)) M m >>= f = M $ m >>> arr (\x -> let M h = f x in (h,())) >>> app

Silmukat ArrowLoop loop :: ArrowLoop a => a (b,d) (c,d) -> a b c kiintopisteoperaattori d:lle