Uusi näkökulma TIEA341 Funktio-ohjelmointi 1 Syksy 2005.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

Matematiikan yo-ohjeita. Yleisohjeita  Laskimet ja taulukot on tuotava tarkastettaviksi vähintään vuorokautta (24h) ennen kirjoituspäivää kansliaan.
15. Loogiset operaatiot.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
JavaScript (c) Irja & Reino Aarinen, 2007
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
AS Automaation signaalinkäsittelymenetelmät
Valitse seuraaviin vaihtoehtotehtäviin oikea vastaus…
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Poikkeuskäsittely- lohkot tMyn1 Poikkeuskäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja.
Taylor polynomi usean muuttujan funktiolle
KERTAUSTA PERUSASTEEN MATEMATIIKASTA Piia junes
Rajoitetut jonot 1. Alhaalta rajoitettu jono
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
Matematiikan yo-ohjeita Yleisohjeita  Laskimet ja taulukot tuotava tarkastettaviksi vähintään vuorokautta ennen kirjoituspäivää kansliaan.  Laskimien.
13. Hyvä ohjelmointitapa (osa 1)
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
Valmennuskurssi sosiaalitieteiden tutkinto-ohjelmaan
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Muuttujat ja vakiottMyn1 Muuttujat ja vakiot PHP-kielen syntaksi on lainattu suurimmaksi osaksi C- kielestä. PHP on erityisesti HTML-dokumenttien sisään.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
Johdatus ohjelmointiin – C kielen peruselementit Tutkijayliopettaja Manne Hannula Opetusharjoittelu (ohjaava opettaja Jukka Jauhiainen)
Tiedon vieminen funktiolle tMyn1 Tiedon vieminen funktiolle, parametrit Argumentin vieminen funktiolle voidaan toteuttaa kahdella menetelmällä: –Pass-by-Value.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Samankantaisten potenssien kerto- ja jakolasku
Javascript 2: Ohjelmointikielen ominaisuudet Jaana Holvikivi Metropolia.
15. Ohjelmoinnin tekniikkaa
Valintarakenne valintarakenne alkaa aina kysymyksellä eli ehdolla ehto tarkoittaa, että muuttujan sisältöä verrataan toisen muuttujan sisältöön tai vakioon.
1..toistolauseet While Wend For Each In [Exit For] Next.
Funktio ja funktion kuvaaja
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Monadit TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Osa 5. Joustoista Kysynnän hintajousto (price elasticity of demand) mittaa, miten kysynnän määrä reagoi hinnan muutokseen = kysytyn määrän suhteellinen.
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.
1.0 TE DiplomityöEsitelmä/ / JT Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olio- orientoituneeseen ohjelmointiin Jukka.
Jatkeet TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Taas laskin TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Tyyppiluokat II ­ konstruktoriluokat, funktionaaliset riippuvuudet ­
Laiska laskenta, korekursio ja äärettömyys
Tieteellisen tekstin piirteitä
Monadeja siellä, monadeja täällä... monadeja kaikkialla?
Funktio-ohjelmointi ja Java
TIES341 Funktio-ohjelmointi 2 Kevät 2006
13. Loogiset operaatiot.
TIES341 Funktio-ohjelmointi 2 Kevät 2006
TIEA341 Funktio-ohjelmointi 1 Syksy 2005
Vielä laskentoa: kertausta ja täsmennystä
Murtoluku Murtoluku on jakolasku, jota ei ole laskettu loppuun asti.
9. Aritmeettiset operaatiot
2. Lukujonot 2.1. Lukujonon käsite -äärellinen tai ääretön Luettelona:
9. Aritmeettiset operaatiot
16. Ohjelmoinnin tekniikkaa
14. Hyvä ohjelmointitapa.
11. Javan valintarakenteet
Laiska laskenta, korekursio ja äärettömyys
Ihmiskielellä on monta käyttötarkoitusta
7. Näytölle tulostaminen
5. Lisää sovellettavuutta
13. Loogiset operaatiot.
3. Attribuutit.
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

Uusi näkökulma TIEA341 Funktio-ohjelmointi 1 Syksy 2005

Aloitetaan alusta... ● Otetaan uusi näkökulma Haskelliin ● “ohjelmointi laskentana” ● kertausta toisaalta, uusia käsitteitä toisaalta ● helpottanee sitten lopulta hahmottamaan, mistä funktio- ohjelmoinnissa oikein on kyse: Funktio-ohjelmointi on pohjimmiltaan laskentoa

Kohdekieli ja metakieli 1 ● Kohdekielellä tarkoitetaan kieltä, jota tarkastellaan – Tällä kurssilla Haskell, laskinesimerkissä aritmetiikka ● Metakieli on kieli, jolla kohdekieltä tarkastellaan – Tällä kurssilla suomi, laskinesimerkissä Haskell ● Toisaalta: kohdekieli esiintyy metakielisessä tekstissä suorina lainauksina. Hän sanoi: “I like it here.” englanti on tässä kohdekieli suomi on tässä metakieli

Kohdekieli ja metakieli 2 ● Jotta metakielellä voidaan puhua kohdekielestä, pitää metakielessä voida esittää kohdekielisiä ilmaisuja – Hän sanoi: “I like it here.” – jasenna “1 + 1” – Yhteen (Luku 1) (Luku 1) ● On mahdollista, että metakieli ja kohdekieli ovat samat – ns. metasirkulaarinen tilanne – “Kappas vain”, sanoi mörökölli.

Eräs kohdekieli: Aritmetiikka ● Lasketaan rationaaliluvuilla – vakiot – yhteen-, vähennys-, kerto- ja jakolasku ● Laajennetaan sitä määrittelyillä: – vakio = lauseke – funktio parametrit = lauseke – esim: square x = x * x ● Huom! Haskellin alikieli :) ● Leibnitzin laki: “samat voidaan korvata toisillaan ilman, että mikään muuttuu”

Laskento nojaa Leibnitzin lakiin square x = x * x 2 * square 3 + x ==> 2 * (3 * 3) + x ==> 2 * 9 + x ==> 18 + x Laskentaympäristö: Vakioiden ja funktioiden määrittelyt, joita voi laskiessa käyttää

Laajennetun aritmetiikan laskusäännöt ● Normaalin aritmetiikan laskusäännöt, plus: ● Funktion laventaminen (ns. -sievennys) – Jos ● laskentaympäristössä on f x 1... x n = e ja ● lausekkeessa on osalausekkeena f e 1... e m ja ● n = m – niin silloin osalauseke f e 1... e m voidaan korvata e:llä kunhan siinä ensin kukin x i korvataan e i :llä ● Vakion laventaminen – funktion laventamisen erityistapaus, jossa n = m = 0.

Muuttujan korvaaminen lausekkeella ● Yllättävän yleinen toimenpide ● Merkintä: e[x 1 e 1,..., x n e n ] ● Tarkoittaa: lausekkeessa e korvataan kukin x i vastaavalla e i :llä ● Merkintä kuuluu metakieleen, ei kohdekieleen! ● Ts. (x + 1)[x2] on metakielinen ilmaisu, joka tarkoittaa samaa kuin

Esimerkki cube a = a * double a double a = a * a cube 42 ==> (-sievennys/cube) 42 * double 42 ==> (- sievennys/double) 42 * (42 * 42) ==> 42 * 1764 ==> 74088

Sievennyksestä vielä ● Alilauseketta, jota voidaan sieventää, sanotaan redeksiksi – Funktiolauseke f e 1... e n on -redeksi, jos ympäristössä on vastaava f x 1... x n =... ● Esim on yhteenlaskuredeksi, mutta x + 6 ei – muuttujaa ei voi laskea yhteen kokonaisluvun kanssa ● Lausekkeessa voi olla useita redeksejä, ja redeksi voi olla toisen redeksin sisällä: – f (2+2) sisältää kaksi redeksiä, jos laskentaympäristössä on f x =...

Normaalimuoto ● Normaalimuoto on sellainen lauseke, jossa ei ole yhtään redeksiä (ts. siihen ei voi soveltaa mitään sievennyssääntöä) ● Esimerkkejä: – x + 1 – f x (kun ympäristössä ei ole f x =...) – 4 + x * 6 – 12 ● Mutta seuraavat eivät ole normaalimuodossa: – 1 + 1, * 5, f z (kun ympäristössä on f x =...)

Laskentajärjestys ● Monet lausekkeet voidaan laskea monessa eri järjestyksessä – Jos lausekkeessa on useita redeksejä, voidaan valita, kumpi sievennetään ensin – Esim. (2 * 3) + (4 * 6) – kaksi *-redeksiä ● Joskus valinnalla on merkitystä: – Kun ympäristössä on f x = 2 ja g x = g (g x): f (g 2) ● kaksi redeksiä: f (g 2) ja g 2 ● jos sievennetään ulompi ensin: f (g 2) ==> 2 ● jos sisempi ensin: f (g 2) ==> f (g (g 2)) ==> f (g (g (g 2))) ==>...

Applikatiivinen järjestys ● Valitaan sievennettävä redeksi seuraavasti: – valitaan vasemmanpuoleisin redeksi ● mutta jos sen sisällä on redeksi, valitaan sisälläolevista vasemmanpuoleisin – mutta jos sen sisällä... jne ● “Sisältä ulos päin” -strategia ● Argumentit ensin, sitten vasta sovelletaan funktiota ● Esimerkki: – Kun ympäristössä on f x = 2 ja g x = g (g x): f (g 2) – sievennetään g 2 ensin

Normaalijärjestys ● Valitaan uloimmista redekseistä vasemmanpuoleisin ● “Ulkoa sisäänpäin” -strategia ● Korvaa funktiokutsut määrittelyillään ennen argumenttien sievennystä ● Esimerkki – Kun ympäristössä on f x = 2 ja g x = g (g x): f (g 2) ● sievennetään ensin f (g 2) ==> 2 ● Teoreema (todistus sivuutetaan): – Jos lausekkeella on normaalimuoto, normaalijärjestys löytää sen

Ohjelmoidaanpa edellinen data Expr = Const Rational | App String [Expr] | Add Expr Expr | Sub Expr Expr | Mul Expr Expr | Div Expr Expr type Env = Map String ([String], Expr) sievenna :: Env -> Expr -> Expr

Sievennys, normaalijärjestyksessä sievenna _ (Add (Const n) (Const m)) = Const (n+m) sievenna _ (Sub (Const n) (Const m)) = Const (n-m) sievenna _ (Mul (Const n) (Const m)) = Const (n*m) sievenna _ (Div (Const n) (Const m)) = Const (n/m) sievenna e (Add e1 e2) = apu e Add e1 e2 sievenna e (Sub e1 e2) = apu e Sub e1 e2 sievenna e (Mul e1 e2) = apu e Mul e1 e2 sievenna e (Div e1 e2) = apu e Div e1 e2... apu e op e1 e2 | e1 /= e1' || e2 /= e2' = sievenna e (op e1' e2') where e1' = sievenna e e1 e2' = sievenna e e2 apu _ op e1 e2 = op e1 e2

Sievennys jatkuu sievenna env (App f args) = case Map.lookup f env of Just (pars, e) | length pars == length arg -> sievenna env' e where env' = Map.union mp env args' = map (\a -> ([],a)) args mp = zip pars args' _ -> App f (map (sievenna env) args)