Lisää laskentoa TIEA341 Funktio-ohjelmointi 1 Syksy 2005.

Slides:



Advertisements
Samankaltaiset esitykset
KERTAUSTA PERUSASTEEN MATEMATIIKASTA Piia junes
Advertisements

KOKEESEEN KERTAAMINEN. ENNEN LUKEMISTA  Herätä kiinnostuksesi:  Mieti, mikä sinua kiinnostaa luettavassa  Mihin tarvitset tietoa, jota olet ryhtymässä.
TIPTOP – Lessons learnt Sisältö Tiptop-projektissa opittua, osallistujien terveiset seuraaville projekteille. Mitä tässä projektissa onnistui.
Abstraktit tietotyypit TIEA341 Funktio-ohjelmointi 1 Syksy 2005.
Yhteiset tutkinnon osat 35 osp Pakolliset osa-alueet 19 osp Valinnaiset osa-alueet 16 osp → syventävät pakollisten osa-alueiden sisältöjä.
Jatkeet TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Uusi näkökulma TIEA341 Funktio-ohjelmointi 1 Syksy 2005.
Matematiikkaa 3 a Kertausjakso – Laskuja MATEMATIIKKAA 3A, KERTAUSJAKSO LASKUJA © VARGA–NEMÉNYI RY 2016.
♣♦♥♠ NT VÄRINKÄSITTELYN PERUSTEITA Kirjan sivut ja ♣♦♥♠ NT 1Bridgen peruskurssi 2. oppitunti.
Minera-malli Opasnetissa Jouni Tuomisto, THL Minera-tiimi.
Taas laskin TIES341 Funktio-ohjelmointi 2 Kevät 2006.
Innovaatioseteli INNOVAATIO-OSAAMISTA YRITYKSEESI
Neuvottelu ja asioiden pilkkomisen taito
Laiska laskenta, korekursio ja äärettömyys
Mitä Raamattu opettaa oikeasta ja väärästä
Bridgekurssi BK-Slam ª©¨§
Yleistajuisemman artikkelin kirjoittaminen
Monadeja siellä, monadeja täällä... monadeja kaikkialla?
Funktio-ohjelmointi ja Java
Asiatekstin rakennemalleja
Kuusela: Tietoaika Lähde: Kuusela 2000: 57.
Ympäristönäkökohdat - kierrätystä
Opettajaopinnot kahdessa aineessa
15 Laki suojelee kuluttajaa s Tuntidiat Tehtävien vastaukset.
Poikkeustenkäsittelylohkot try-catch
TIES341 Funktio-ohjelmointi 2 Kevät 2006
Puolustus on puoli ruokaa - bridgessäkin
Vastuullisuus Askel 7.
Sujuva väylä ammatillisesta koulutuksesta ammattikorkeakouluun
Koeviikko Jokainen jakso päättyy koeviikkoon  oma lukujärjestys verkkopenaalissa Jokaiselle kokeelle yksi ilta Koe klo 16.30–19.30 poistua saa aikaisintaan.
Asiatekstin rakennemalleja
Datan avaamisen ohjeistus
YLIOPPILASKIRJOITUKSIIN
Tekstinhuoltoa 3.
TIEA341 Funktio-ohjelmointi 1 Syksy 2005
Nuorten tieto- ja neuvontatyön osaamiskartta Heta Malinen Lähde: Pirjo Kovalainen, Osaamiskartta testiversio.
Vielä laskentoa: kertausta ja täsmennystä
Peda.netin oma tila Luo peda.netin omaan tilaasi sivu Hiekanpään koulu 7-9lk Lisää sivun lukijoiksi kaikki sinua opettavat opettajat Tee sivun alle uusi.
Oppilaanohjaaja Sari Kuutsa-kettunen
Luokan määrittely class-määreellä
STARTTIKOULUTUS MAALIVAHTIPELISTÄ
6. Pyhien kirjojen sisältö
7. Näytölle tulostaminen
Murtoluku Murtoluku on jakolasku, jota ei ole laskettu loppuun asti.
9. Aritmeettiset operaatiot
Äidinkielen yo-koetyyppi keväästä 2007 alkaen: oma tekstilajinsa
9. Aritmeettiset operaatiot
11. Javan valintarakenteet
Laiska laskenta, korekursio ja äärettömyys
Datan avaamisen ohjeistus
4. Attribuutit.
7. Hyvä ohjelmointitapa..
Sujuva väylä ammatillisesta koulutuksesta ammattikorkeakouluun
TEKSTIOPPI s
Microsoft SharePointin mukauttaminen Verkkosivusto
Opintopsykologi Katja Hietanen
Terveiset Yö-ryhmästä
Tilaustoimitusprosessin kuvaus
Laajennettu tehtävätoimeksianto (Taatila-Suomala 2008, 30-36)
Lisätietoa Turnitinista Moodlessa
Mitä uutta töissä.fi-palveluun?
LCB-5800 Ruotsinkielinen yritysviestintä 1
Opettajan pedagoginen ajattelu
KAUPPAHALLI PAIKKA: ”Kauppahalli”, jossa myyjät ja ostajat kohtaavat
Vinkkejä juridiikan opiskeluun
Hyvinvointi- ja terveyserot -sivusto
HYVINVOINTITIEDON KLINIKKA
8. Periytyminen.
Blackout This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No
2.3 Tutustutaan kirjastoihin
Esityksen transkriptio:

Lisää laskentoa TIEA341 Funktio-ohjelmointi 1 Syksy 2005

Kertausta: Laajennettu 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”

Kertausta: Laaj. 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.

Kertausta: Redeksit ● 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 =...

Kertausta: 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 =...)

Kertausta: 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

Kertausta: 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

Asian pihvi? ● “Laajennettu aritmetiikka” on yksinkertaistettu versio osasta Haskellia ● Kaikki se, mitä “laajennetusta aritmetiikasta” on sanottu, pätee soveltuvin osin myös Haskelliin ● Erityisesti: Haskell on pohjimmiltaan laskentoa – kääntäjän tehtävänä on laskea meidän puolestamme – silti on erittäin hyödyllistä osata tarvittaessa laskea käsin ● Haskell noudattaa normaalijärjestystä – tai oikeastaan graafinsievennystä

DAG-esitys ja graafinsievennys x = 2 * 2 x * (2 + x) * * 2 + DAG-esitys Lausekkeen rakennepuu, jos- sa yhteiset alilausekkeet on samastettu Graafinsievennys Sievennetään DAG-esitystä tavalliseen tapaan, mutta korvataan louksi DAG:ssa sievennetyn alilausekkeen “juurisolmu” vastauksen juuri- solmulla

x = 2 * 2 x * (2 + x) * * 2 + Redeksi

4 * (2 + 4) * Redeksi

4 * 6 * 4 6 Redeksi

Algebralliset tyypit laaj. aritmetiikassa ● Algebrallisen tyypin määrittely on luettavissa kontekstittomana kielioppina, joka sanoo, minkä näköisiä ko. tyypin normaalimuotoiset lausekkeet ovat data RatList = Cons Rational RatList | Nil Nil Cons q Nil (jokaisella q :: Rational) Cons q1 (Cons q2 Nil) (jokaisella q1, q2 :: Rational)...

Heikko päänormaalimuoto (WHNF) ● Lauseke on heikossa päänormaalimuodossa, jos: – se on vakio, tai – se on konstruktorilauseke ● ei vaadita, että konstruktorin argumentit olisivat WHNF WNHF Ei WNHF 42 x Cons 42 Nil f (Cons 42 Nil) Cons (f x) y g x r Nil

Heikosta päänormaalimuodosta vielä ● Normaalimuotoinen lauseke on aina WHNF ● WHNF-lauseke ei ole aina normaalimuotoinen ● Normaalijärjestyksessä etenevä laskenta löytää aina WHNF:n ennen normaalimuotoa – toki tuo WHNF voi olla normaalimuoto itsekin :) ● WNHF on avainkäsite, kun mietitään hahmonsovitusta

Hahmonsovitus 1 ● Laajennetaan “laajennettua aritmetiikkaa” lisäämällä case- lausekkeet – nyt aluksi ilman vahteja case e of p 1 -> e 1 p 2 -> e 2... p n -> e n Hahmo p i voi olla ● vakio ● muuttuja ● konstruktori, jonka argu- mentit ovat muuttujia (huomaa poikkeus Haskellista)

Case-lausekkeen sievennyssääntö ● Esiehto: e on WHNF-muodossa – case-lauseketta ei voi sieventää, jos tämä ei päde – käytännössä tarkoittaa ● sievennä e WHNF-muotoon ensin ● Valitse hahmoista p i ylin, johon WHNF-muotoinen e sopii – jos sellaista ei ole, case-lauseketta ei voi sieventää ● Korvaa case-lauseke lausekkeella e i – korvaa kuitenkin hahmossa p i esiintyvät muuttujat niillä e i :n osalausekkeilla, johon ne osuvat case e of p 1 -> e 1 p 2 -> e 2... p n -> e n

f x = Cons x Nil case f 42 of Nil -> 0 Cons x y -> x+1 ==> case Cons 42 Nil of Nil -> 0 Cons x y -> x+1 ==> (x+1)[x42,yNil] eli 42+1 ==> 43

Haskellin case-lausekkeesta 1 ● Haskell sieventää case-lausekkeen samalla tavalla ● Ensiksi kuitenkin rekursiivisten hahmojen käytöt puretaan sisäkkäisiksi case-lausekkeiksi: case e of Cons x (Cons y Nil) -> e' ==> case e of Cons x tmp -> case tmp of Cons y Nil -> e'

Haskellin case-lausekkeesta 2 ● Sama tehdään vahdeille: case e of Cons x Nil | x > 0 -> e1 | x e2 ==> case e of Cons x Nil -> case x > 0 of True -> e1 False -> case x < 0 of True -> e2