Logiikkaohjelmien kääntäminen

Koko: px
Aloita esitys sivulta:

Download "Logiikkaohjelmien kääntäminen"

Transkriptio

1 Logiikkaohjelmien kääntäminen Tommi Syrjänen 44089L 4 helmikuuta 2002 Tiivistelmä Logiikkaohjelmointikielten suora tuki epädeterministiselle haulle aiheuttaa erityisvaatimuksia niiden kääntäjille Logiikkaohjelmointijärjestelmän täytyy osata tehdä ja peruuttaa valintoja tehokkaasti Tässä työssä esitetään perusteet Prolog-pohjaisen kielen kääntämisestä virtuaalikoneella ajettavaksi tavukoodiksi 1 Johdanto Logiikkaohjelmointikielen toteutus poikkeaa suuresti perinteisen imperatiivisen kielen toteutuksesta Suurin syy tähän on kielen suora tuki epädeterministisille valinnoille Käyttäjän antamaa kyselyä ratkaistessaan logiikkaohjelmointijärjestelmä voi joutua valitsemaan kahden tai useamman vaihtoehdon välillä, ja väärän valinnan jälkeen korjaamaan tilanteen sekä jatkamaan toisen vaihtoehdon käsittelyä Tässä työssä käsitellään Prolog-kielen pienen osajoukon kääntämistä virtuaalikoneen päällä toimivaksi tavukoodiksi Kappaleessa 2 esitellään kieli tarkemmin, mutta alla on esitetty muutamia kielen tärkeimpiä eroja verrattuna perinteisiin ohjelmointikieliin: Ohjelmoija ei käytä tavallisia algoritmeja, vaan määrittelee ongelman käyttäen loogisia päättelysääntöjä Laskenta on kyselypohjaista, eli käyttäjä antaa haluamansa johtopäätöksen, ja järjestelmä yrittää sitten todistaa sen käyttämällä ohjelmassa esiintyviä sääntöjä Mikäli jossain vaiheessa laskentaa voidaan soveltaa useampaa kuin yhtä sääntöä, järjestelmä käyttää ensin yhtä niistä Mikäli tämä ei johda todistukseen, järjestelmä automaattisesti peruuttaa valinnan ja soveltaa seuraavaa sääntöä Globaaleja muuttujia ei ole, vaan kunkin muuttujan vaikutusalueena on vain se sääntö, jossa se esiintyy Mikäli sama muuttuja esiintyy kahdessa eri säännössä, se nimetään automaattisesti uudelleen toisessa niistä 1

2 Tässä työssä ei käsitellä kääntäjäoptimointeja, kuten häntärekursion poistoa tai suoritettujen kyselyiden tallettamista hakemistorakenteisiin (indexing) Lisäksi tarkastellaan ainoastaan ohjelmia, joissa ei esiinny negaatioita missään muodossa 2 Logiikkaohjelmointi Logiikkaohjelman syntaksi muodostuu termeistä, predikaateista sekä säännöistä Termi on joko vakio, muuttuja tai funktio Muuttujattomat termit muodostavat ohjelman universumin Predikaatit esittävät relaatioita universumin alkioiden kesken, ja säännöt määrittelevät milloin predikaatit ovat tosia ja milloin epätosia Literaalit ovat muotoa 1 : p(t 1,, t n ), (1) missä p on predikaatti ja t 1,, t n ovat termejä Literaali voi olla joko tosi tai epätosi Esimerkki 1 Olkoon ohjelman universumi luonnollisten lukujen joukko N Tarkastellaan predikaattia plus(x, Y, Z), jonka tulkintana on tavallinen yhteenlasku x + y = z Tällöin literaali plus(1, 2, 3) on tosi, kun taas plus(1, 2, 5) on epätosi Literaali plus(1, X, 3) on tosi, mikäli muuttujan X arvo on 2, muuten se on epätosi Ohjelman säännöillä määritellään predikaattien tulkinta, eli käytännössä kerrotaan, milloin literaalit ovat tosia Sääntö on muotoa: h a 1,, a n, (2) missä literaali h on säännön pää, ja literaalit a 1,, a n muodostavat säännön vartalon Intuitiivisesti sääntö (2) tarkoittaa, että mikäli a 1,, a n ovat kaikki tosia, niin myös h:n täytyy olla tosi Sääntö voidaan tulkita myös proseduurina: literaalin h todistamiseksi täytyy ensin todistaa a 1, sitten a 2, jne aina literaaliin a n asti Esimerkki 2 Seuraavat kaksi sääntöä määrittelevät predikaatin member(x, Y ), joka on tosi, mikäli alkio X kuuluu listaan Y : member(x, [X, R]) member(x, [Z, R]) member(x, R) Perinteiset logiikkaohjelmointijärjestelmät ovat kyselypohjaisia, eli ohjelman käyttäjä antaa syötteeksi atomin h, ja päättelykone yrittää johtaa h:n käyttäen ohjelman sääntöjä Käytännössä kone käy sääntöjä läpi yksi kerrallaan kunnes löytää säännön, jonka päässä oleva atomi h unifioituu atomin h kanssa, eli on olemassa tapa σ korvata h:n ja h :n muuttujat siten, että σ(h) = σ(h ) 1 Tarkkaan ottaen literaali voi olla myös muotoa p(t 1,, t n) tai not p(t 1,, t n), mutta tässä työssä käsitellään ainoastaan positiivisia ohjelmia, joissa ei negaatioita esiinny 2

3 Kun unifioitava sääntö löytyy, kone yrittää yksi kerrallaan todistaa tämän vartalossa olevia literaaleja Näin jatketaan, kunnes joko todistus valmistuu tai joudutaan tilanteeseen, missä sopivaa sääntöä ei enää löydy Jälkimmäisessä tapauksessa järjestelmä peruuttaa viimeiseksi käytetyn säännön ja yrittää valita uuden, todistukseen ehkä paremmin sopivan säännön Esimerkki 3 Esitetään esimerkin 2 ohjelmalle kysely member(a, [b, a, c])? Ensimmäisen säännön päänä oleva atomi member(x, [X, R]) ei unifioidu tämän kanssa, sillä a b Jälkimmäinen sääntö unifioituu muuttujasidonnalla {X = a, Z = b, R = [a, c]}, joten seuraavaksi kyselyksi otetaan member(a, [a, c]) Tämä puolestaan unifioituu ensimmäisen säännön kanssa ja todistus on valmis 3 Virtuaalikone Logiikkaohjelmien kääntämisessä kohdeympäristönä on yleensä jokin virtuaalikone Tämä siksi, että tavallisissa tietokonearkkitehtuurissa ei ole suoraan tuettu logiikkaohjelmien erityispiirteitä, kuten unifiointia Tässä työssä esitellään WiM-virtuaalikone, joka on yksinkertaistettu versio Prolog-kielen toteutuksissa käytetystä Warren Abstract Machine-koneesta (WAM) Tärkeimpinä rajoitteina WiM tukee vain positiivisia ohjelmia eikä siinä ole kääntäjäoptimointeja WiM-koneen muistiavaruus jakautuu neljään osaan: ohjelmakoodi (program store P S), pino (stack ST ), kasa (heap H) ja polku (T R) Koodialueeseen talletetaan ohjelma tavukoodina, pinoa käytetään laskennan aikana sääntöjen kehysten tallentamiseen, kasaan talletetaan termit ja polkuun tallennetaan laskennan aikana tehdyt muuttujasidonnat Rekistereitä koneessa on seitsemän: P C osoittaa kulloinkin ajettavaan käskyyn (P S[P C]) SP osoittaa pinon seuraavaan vapaaseen alkioon (ST [SP ]) F P osoittaa viimeisimmän pinokehyksen alkuun (ST [F P ]) HP osoittaa kasan seuraavaan vapaaseen alkioon (H[HP ]) T P osoittaa polun seuraavaan vapaaseen alkioon (T R[T P ]) BT P osoittaa viimeisimpään peruutuspisteeseen (ST [BT P ]) mode-rekisteriä käytetään unifioinnin aikana osoittamaan muuttujan tilaa Kone suorittaa ajon aikana jatkuvasti seuraavaa silmukkaa: 1 Lataa käsky I = P S[P C] 2 P C := P C Suorita I 3

4 vakio a: ATOM a sidottu muuttuja: REF vapaa muuttuja: REF funktio f(t 1,, t n ): STRUCT f/n Kuva 1: Tietorakenteet Logiikkaohjelma käännetään tavukoodiksi siten, että jokaisesta predikaatista ja säännöstä tulee oma proseduurinsa Predikaatin p proseduuri kutsuu järjestyksessä kaikkien sääntöjensä proseduureja Säännön proseduurin aluksi unifioidaan kysely säännön pään kanssa, ja mikäli tämä ei onnistu peruutetaan Muussa tapauksessa käydään järjestyksessä läpi kaikki säännön vartalossa olevat literaalit, ja kutsutaan niiden predikaattien proseduureja 4 Tietotyypit ja pinokehys Ohjelmassa esiintyvien termien (vakiot, muuttujat ja funktiot) käsittelyssä käytetään apuna kaikkia kolmea muistiavaruutta Termit luodaan kasaan tyyppiobjekti-pareina kuvissa 1 ja 2 esitettyyn tapaan, ja uuden termin osoite talletetaan aina suoraan kulloiseenkin pinokehykseen Polkuun merkitään muistiin muuttujien sitomisajankohdat Perusrakenteeltaan kehys on hyvin samanlainen kuin proseduraalisissa kielissä, tärkeimpänä erona on unifioinnin ja peruutuksen vaatimat lisäkentät Kuvassa 3 esitetään kehyksen yleinen rakenne Kenttien merkitys on seuraavanlainen: jatko-osoite osoite, josta ohjelman suorittamista jatketaan, mikäli kysely onnistuu F P old osoitin edellisen pinokehyksen alkuun t 1,, t n osoittimet säännön päässä olevan literaalin argumentteihin lokaali ympäristö osoittimet säännössä esiintyviin muuttujiin lokaali pino ylimääräinen tila, jota käytetään unifioinnin apuna 4

5 STRUCT: f/3 REF STRUCT: g/2 REF ATOM a REF Kuva 2: Funktiota f(g(x, Y ), a, Z) vastaava rakenne BT P old, T P old, HP old, peruutusosoite peruutuksen toteuttamiseen käytettäviä kenttiä Kutsuttaessa säännön proseduuria kutsuja asettaa argumenttien t i paikoilleen, muuten kehyksen luo kutsuttu proseduuri arvot 5 Termit ja kyselyt Tarkastellaan ensin yksittäisen kyselyn kääntämistä tavukoodiksi Aluksi määritellään joukko funktioita code A( x, ρ), jotka luovat kasaan uuden termin x sekä asettavat tarvittaessa paikalliseen ympäristöön ρ osoittimen uuteen ter- Käsky Merkitys Muuta putatom a SP := SP + 1; vakio ST [SP ] := new(at OM : a); putvar i SP := SP + 1; vapaa muuttuja ST [F P + i] := new(ref : HP ); ST [SP ] := ST [F P + i]; putref i SP := SP + 1; sidottu muuttuja ST [SP ] := ST [F P + i]; putstruct f/n SP := SP n + 1; ST [SP ] := new(st RUCT : f/n, ST [SP ],, ST [ST + n 1]); Taulukko 1: Termien luominen 5

6 F P jatko-osoite F P old BT P old T P old HP old peruutusosoite t 1 t 2 tilasolut argumentit SP t n l ymäristö l pino paikalliset muuttujat Kuva 3: Pinokehyksen rakenne Käsky Merkitys Muuta enter SP := SP + 6; tilasolut ST [SP 4] := F P kehysosoitin talteen call p/n F P := SP (n + 4); F P uuteen kehykseen ST [F P 1] := P C; paluuosoite P C := Addr(Code(p/n)) Taulukko 2: Proseduurikutsut miin Ainoan poikkeuksen tästä säännöstä muodostavat muuttujat, sillä ainoastaan muuttujan X ensimmäiselle esiintymälle luodaan kasaobjekti, ja sen kaikki muut esiintymät X asetetaan osoittamaan samaan objektiin Taulukossa 1 esitellään funktioissa käytetyt käskyt, ja itse funktiot ovat: code A(a, ρ) = putatom a vakio code A(X, ρ) = putvar ρ(x) ensimmäinen esiintymä code A(X, ρ) = putvar ρ(x) ensimmäinen esiintymä code A( X, ρ) = putref ρ(x) seuraavat esiintymät code A(f(t 1,, t n ), ρ = code A(t 1, ρ) funktio code A(t n, ρ) putstruct f/n 6

7 Kyselyn kääntäminen tapahtuu hyvin suoraviivaisesti, ja käytännössä luodaan ainoastaan uusi proseduurikutsu Aluksi varataan pinosta tila kutsutun proseduurin argumenteille ja tilasoluille, minkä jälkeen asetetaan argumentit paikoilleen ja kutsutaan proseduuria: code G(p(t 1,, t n ), ρ) = enter code A(t 1, ρ) 6 Unifiointi code A(t n, ρ) call p/n Epäilemättä työläin ja monimutkaisin osa logiikkaohjelmien kääntämisessä on unifioinnin toteuttaminen Selvyyden vuoksi ja tilanpuutteen takia tässä työssä ei esitetä unifioinnin kaikkia yksityiskohtia vaan pidättäydytään yleisellä tasolla Unifioinnin tarkoituksena on selvittää, voidaanko kaksi literaalia muuttaa samoiksi korvaamalla niiden muuttujat sopivasti Muuttuja X voidaan korvata joko toisella muuttujalla Y, vakiolla a tai funktiolla f(t 1,, t n ) olettaen, että X ei esiinny f:n argumenteissa 2 Esimerkki 4 Literaalit p(x, a, f(g, Z)) ja p(b, Z, f(y, a) ovat unifioituvia, ja niiden yleisin unifioija σ = {X = b, Y = g, Z = a} Sitä vastoin q(a, X) ja q(x, b) eivät unifioidu, sillä ei ole mahdollista, että X = a = b Logiikkaohjelmoinnin tapauksessa halutaan selvittää, voidaanko kysely p(t 1 ) unifioida säännön pään p(t 2 ) kanssa Kyselyn käännös nähtiin yllä kohdassa 5 Säännön pää p(t 2 ) käännetään käskyjonoksi, joka yrittää unifioida termit t 1 ja t 2 Mikäli unifiointi ei onnistu, peruutetaan hyppäämällä peruutusproseduuriin backtrack Muussa tapauksessa käsitellään säännön vartalo Kuten esimerkistä 4 huomataan, voi sekä t 1 :ssä että t 2 :ssa olla vapaita muuttujia Näin ollen täytyy unifikaatiokoodin osata hoitaa myös t 1 :n muuttujien sitominen tarvittaessa Tämä toteutetaan käyttämällä erillisiä luku- ja kirjoitustiloja, joiden hallintaan käytetään mode-rekisteriä Lukutilassa luetaan termin t 1 seuraava alitermi, ja sidotaan vastaava t 2 :n alitermi siihen Kirjoitustilassa puolestaan sidotaan t 1 :n vapaa muuttuja X vastaavaan t 2 :n alitermiin Aina, kun muuttuja sidotaan, käydään samalla merkitsemässä polkuun tieto tästä Tämä siksi, että muuten ei peruutettaessa voitaisi poistaa oikeita muuttujasidontoja Unifikaatioalgoritmi on esitetty kuvassa 4 pseudokoodina 7 Säännöt ja proseduurit Sääntöjen kääntäminen on varsin suoraviivaista Ensin täydennetään pinokehys valmiiksi sekä asetetaan peruutuspiste mikäli tarpeellista Tämän jälkeen 2 Useimmat Prolog-toteutukset jättävät tehokkuussyistä viimeisen ehdon tarkistamatta 7

8 unifyvar(x, t) = if bound(x) then unify(t, ref (X)) else bind(x, t) fi unify(t 1, t 2 ) = case t 1 of atom a: case t 2 of atom a : if a a then goto backtrack fi variable X: unifyvar(x, t 1 ) function f/n: goto backtrack esac variable X: unifyvar(x, t 2 ) function f(x 1,, x n ): case t 2 of function f(y 1,, y n ): for i := 1 to n do unify(x i, y i ) od variable X: unifyvar(x, t 1 ) def ault: goto backtrack esac esac Kuva 4: Unifikaatioalgoritmi suoritetaan unifiointi argumentti kerrallaan, ja mikäli se onnistuu kutsutaan kaikkia vartalossa olevia literaaleja kyselyinä Lopuksi siivotaan pino Sääntö C: p(t 1,, t n ) g 1,, g m käännetään seuraavasti: Käsky Merkitys Muuta pushenv k SP := F P + k; pusharg i SP := F P + 1; ST [SP ] := ST [F P i]; Taulukko 3: Ympäristöjen luominen 8

9 Käsky Merkitys Muuta setbtp l ST [F P + 1] := BT P ; ST [F P + 2] := T P ; ST [F P + 3] := HP ; ST [F P + 4] := l; peruutusosoite BT P := F P ; uusi peruutuspiste nextalt l ST [F P + 4] := l; seuraavan vaihtoehdon paikka delbtb BT P := ST [F P + 1]; poistetaan peruutuspiste Taulukko 4: Peruutuspisteiden luominen code C(C, btparam, btcont) = pushenv n + r + 4; tila argumenteille btinit btparam btcont; peruutuspiste pusharg 1; unifioidaan ensimcode U(t 1, ρ); mäinen argumentti pusharg n; code U(t 1, ρ); code G(g 1, ρ); code G(g m, ρ); fin btparam; where ρ = [X i n + i + 4] r i=1 unifioidaan viimeinen argumentti ensimmäinen kysely viimeine kysely loppusiivous Tässä parametri btparam määrittelee säännön paikan predikaatin määrittelyssä ja btcont on osoite, josta jatketaan mahdollisen peruutuksen jälkeen Peruutuksen tominta on selitetty tarkemmin seuraavassa kappaleessa 8 Peruutus Laskennan aikana voidaan joutua peruuttamaan kahdesta eri syystä: unifioinnin epäonnistuessa tai haluttaessa laskea useampia kuin yksi vastaus Tällöin laskenta pitää palauttaa takaisin viimeisintä valintaa edeltäneeseen tilanteeseen Aina, kun laskennan kestäessä kutsutaan kyselyä, jolla on useita vaihtoehtoisia sääntöjä, luodaan peruutuspiste Peruutuspisteessä talletetaan edellisen pisteen paikka, kasa- ja polkuosoittimien arvot sekä seuraavan vaihtoehtoisen säännön koodin alkukohta Mikäli pisteeseen peruutetaan, muut arvot pysyvät ennallaan, mutta seuraava vaihtoehto päivitetään uuteen Piste tuhotaan heti viimeistä vaihtoehtoa kutsuttaessa Peruutuspiste luodaan käyttämällä käyttämällä funktiota btinit: btinit btparam btcont = case btparam of first: setbtp btcont; 9

10 middle: nextalt btcont; last: delbtp; single: esac Tässä btparam kertoo säännön sijainnin predikaatin määritelmässä: onko se ensimmäinen, viimeinen, ainoa vai keskellä Mikäli sääntö on predikaatin ainoa, ei peruutuspistettä luoda Itse peruutus tapahtuu hyppäämällä ohjelman globaaliin backtrack-nimiöön, joka on määritelty seuraavasti: backtrack: F P := BT P ; HP := ST [F P + 3]; reset(st [F P + 2], T P ); T P := ST [F P + 2]; P C := ST [F P + 4]; Tässä reset on funtio, joka poistaa sidonnat kaikilta muuttujilta, jotka ovat saaneet arvonsa peruutuspisteen asettamisen jälkeen, ja se näyttää seuraavalta: reset(tpu, tpo) = for i := tpu to tpo do H[T R[i]] := i (???) od 9 Viimeiset silaukset Enää on jäljellä säännön kutsumisen onnistunut päättäminen sekä predikaatin sääntöjen yhdistäminen yhdeksi proseduuriksi Koska käyttäjä voi haluta laskea useamman kuin yhden vastauksen, ei predikaatin kehystä voida poistaa ennen kuin kaikki peruutusvaihtoehdot käyty läpi Niinpä funktio fin määritellään seuraavasti: fin = case btparam of last, single: popenv; first, middle: restore; esac Predikaatin P R säännöt C 1,, C n yhdistetään proseduuriksi: code PR(C 1,, C n ) = code C(C 1, first, l 2 ) l 2 : code C(C 2, middle, l 3 ) l n : code C(C n, last, 0) 10

11 Käsky Merkitys Muuta popenv iff P > BT P voidaanko kehys poistaa? thensp := F P 2 vapautetaan tila fi; P C := ST [F P 1]; F P := ST [F P ]; restore P C := ST [F P 1]; F P := ST [F P ]; Taulukko 5: Ympäristöjen siivoaminen 10 Yhteenveto Työssä esiteltiin WiM-virtuaalikonearkkitehtuuri, jolla voidaan suorittaa logiikkaohjelmakyselyitä Lisäksi esitetiin perusperiaatteet positiivisten logiikkaohjelmien kääntämiseksi WiM-koneelle Yksittäiset päättelysäännöt käännetään proseduureiksi, joiden aluksi tarkistetaan, unifioituuko säännön pää kyselyn kanssa Jos näin käy, tehdään säännön vartalon literaaleista yksi kerrallaan uusia kyselyitä Mikäli unifiointi epäonnistuu jossain vaiheessa, kutsutaan peruutusproseduuria, joka poistaa viimeisen epäonnistuneen valinnan ja tekee sen tilalle uuden Peruutuksessa käytetään apuna polku-muistialuetta, johon tallennetaan tiedot siitä, milloin mikäkin muuttuja on saanut arvonsa Työn aihepiirin ulkopuolelle jäi optimointien ja negaation toteuttaminen Tästä aiheesta on julkaistu paljon kirjallisuutta, ja hyvä lähtökohta aiheeseen tutustumiseen on vapaasti saatavilla oleva XSB-logiikkaohjelmointijärjestelmä ja sen dokumentaatio [1] Viitteet [1] W Chen and D S Warren Tabled evaluation with delaying for general logic programs Journal of the Association for Computing Machinery, 43:20 74, [2] Leon Sterling and Ehud Shapiro The Art of Prolog, 2nd ed MIT press, 1994 [3] Reinhard Wilhelm and Dieter Maurer Compiler Design Addison-Wesley Publishing Company,

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

2. Minkä joukon määrittelee kaava P 0 (x 0 ) P 1 (x 0 ) mallissa M = ({0, 1, 2, 3}, P M 0, P M 1 ), kun P M 0 = {0, 1} ja P M 1 = {1, 2}?

2. Minkä joukon määrittelee kaava P 0 (x 0 ) P 1 (x 0 ) mallissa M = ({0, 1, 2, 3}, P M 0, P M 1 ), kun P M 0 = {0, 1} ja P M 1 = {1, 2}? HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan II, syksy 2018 Harjoitus 4 Ratkaisuehdotukset 1. Mitkä muuttujat esiintyvät vapaina kaavassa x 2 ( x 0 R 0 (x 1, x 2 ) ( x 3 R 0 (x 3, x 0

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

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

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

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

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

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

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

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

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

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

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne. Proseduurit Proseduuri voi olla 1) Funktio, joka palauttaa jonkin arvon: real function sinc(x) real x sinc = sin(x)/x... y = sinc(1.5) 2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma

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

Matematiikan tukikurssi, kurssikerta 1

Matematiikan tukikurssi, kurssikerta 1 Matematiikan tukikurssi, kurssikerta 1 1 Joukko-oppia Matematiikassa joukko on mikä tahansa kokoelma objekteja. Esimerkiksi joukkoa A, jonka jäseniä ovat numerot 1, 2 ja 5 merkitään A = {1, 2, 5}. Joukon

Lisätiedot

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos. TIE303 Formaalit menetelmät, kevät 2005 Logiikan kertausta Antti-Juhani Kaijanaho antkaij@mit.jyu.fi Jyväskylän yliopisto Tietotekniikan laitos TIE303 Formaalit mentetelmät, 2005-01-27 p. 1/17 Luento2Luentomoniste

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

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

TAMPEREEN YLIOPISTO Pro gradu -tutkielma. Roosa Niemi. Riippuvuuslogiikkaa

TAMPEREEN YLIOPISTO Pro gradu -tutkielma. Roosa Niemi. Riippuvuuslogiikkaa TAMPEREEN YLIOPISTO Pro gradu -tutkielma Roosa Niemi Riippuvuuslogiikkaa Informaatiotieteiden yksikkö Matematiikka Syyskuu 2011 Tampereen yliopisto Informaatiotieteiden yksikkö ROOSA NIEMI: Riippuvuuslogiikkaa

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi 5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin,

Lisätiedot

T Kevät 2006 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (opetusmoniste, kappaleet )

T Kevät 2006 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (opetusmoniste, kappaleet ) T-79.3001 Kevät 2006 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (opetusmoniste, kappaleet 2.3 3.4) 21. 24.3.2006 1. Olkoon R kaksipaikkainen predikaattisymboli, jonka tulkintana on relaatio

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 1 Matemaattisesta päättelystä Matemaattisen analyysin kurssin (kuten minkä tahansa matematiikan kurssin) seuraamista helpottaa huomattavasti, jos opiskelija ymmärtää

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

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT

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

T Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut

T Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut T-79.146 Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut 1. Jokaiselle toteutuvalle lauselogiikan lauseelle voidaan etsiä malli taulumenetelmällä merkitsemällä lause taulun

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Monipuolinen esimerkki

Monipuolinen esimerkki Monipuolinen esimerkki Lopuksi monipuolinen esimerkki, jossa ohjelmisto koostuu pääohjelmasta ja kahdesta aliohjelmasta, joista toinen on proseduuri ja toinen funktio. Funktio Sqrt(int n): int Sqrt(int

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

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

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut T-79.5101 kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut 1. Jokaiselle toteutuvalle lauselogiikan lauseelle voidaan etsiä malli taulumenetelmällä merkitsemällä lause taulun juureen

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

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

T Kevät 2009 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (Predikaattilogiikka )

T Kevät 2009 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (Predikaattilogiikka ) T-79.3001 Kevät 2009 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (Predikaattilogiikka 10.3. 11.4) 26. 30.3. 2009 Ratkaisuja demotehtäviin Tehtävä 10.5 Allaolevat kolme graafia pyrkivät selventämään

Lisätiedot

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Tieto ja sen osoite (3) X DC LOAD, =X LOAD R2, X int x =; symbolin X arvo muuttujan X arvo

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

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

T Syksy 2005 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (opetusmoniste, kappaleet )

T Syksy 2005 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (opetusmoniste, kappaleet ) T-79.144 Syksy 2005 Logiikka tietotekniikassa: perusteet Laskuharjoitus 8 (opetusmoniste, kappaleet 2.3-3.4) 2 5.11.2005 1. Olkoon R kaksipaikkainen predikaattisymboli, jonka tulkintana on relaatio R A

Lisätiedot

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Matti Nykänen 5. joulukuuta 2003 1 Satelliitit Muunnetaan luennoilla luonnosteltua toteutusta seuraavaksi: Korvataan puusolmun p kentät p. key ja

Lisätiedot

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion.

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Vastaavuus puolestaan on erikoistapaus relaatiosta.

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

Predikaattilogiikan malli-teoreettinen semantiikka

Predikaattilogiikan malli-teoreettinen semantiikka Predikaattilogiikan malli-teoreettinen semantiikka February 4, 2013 Muistamme, että predikaattilogiikassa aakkosto L koostuu yksilövakioista c 0, c 1, c 2,... ja predikaattisymboleista P, R,... jne. Ekstensionaalisia

Lisätiedot

Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ... 1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin

Lisätiedot

3. Predikaattilogiikka

3. Predikaattilogiikka 3. Predikaattilogiikka Muuttuja mukana lauseessa. Ei yksikäsitteistä totuusarvoa. Muuttujan kiinnittäminen määrän ilmaisulla voi antaa yksikäsitteisen totuusarvon. Esimerkki. Lauseella x 3 8 = 0 ei ole

Lisätiedot

T Logiikka tietotekniikassa: perusteet Kevät 2008 Laskuharjoitus 11 (predikaattilogiikka )

T Logiikka tietotekniikassa: perusteet Kevät 2008 Laskuharjoitus 11 (predikaattilogiikka ) T-79.3001 Logiikka tietotekniikassa: perusteet Kevät 2008 Laskuharjoitus 11 (predikaattilogiikka 14.1 14.5) 23. 25.4.2008 Ratkaisuja demotehtäviin Tehtävä 14.1 Herbrand-universumi U muodostuu termeistä,

Lisätiedot

Luento 8: Epälineaarinen optimointi

Luento 8: Epälineaarinen optimointi Luento 8: Epälineaarinen optimointi Vektoriavaruus R n R n on kaikkien n-jonojen x := (x,..., x n ) joukko. Siis R n := Määritellään nollavektori 0 = (0,..., 0). Reaalisten m n-matriisien joukkoa merkitään

Lisätiedot

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014 Racket ohjelmointia osa 2 Tiina Partanen Lielahden koulu 2014 Sisältö 1) Funktiot ja muuttujat (kertaus) 2) Animaatiot & pelit (big-bang) 3) Vertailuoperaattorit sekä boolean arvot 4) Tietorakenteet (struct)

Lisätiedot

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti. Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen

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

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento

Lisätiedot

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100 Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).

Lisätiedot

2 Yhtälöitä ja epäyhtälöitä

2 Yhtälöitä ja epäyhtälöitä 2 Yhtälöitä ja epäyhtälöitä 2.1 Ensimmäisen asteen yhtälö ja epäyhtälö Muuttujan x ensimmäisen asteen yhtälöksi sanotaan yhtälöä, joka voidaan kirjoittaa muotoon ax + b = 0, missä vakiot a ja b ovat reaalilukuja

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

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus) VISUAL BASIC OHJEITA Kutsuttava ohjelma alkaa kometoparilla Sub... End Sub Sub ohjelmanimi()...koodia... End Sub Muuttujat Muuttujan esittely Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency,

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

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

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

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö Johdatus diskreettiin matematiikkaan Harjoitus 5, 14.10.2015 1. Ratkaise rekursioyhtälö x n+4 2x n+2 + x n 16( 1) n, n N, alkuarvoilla x 1 2, x 2 14, x 3 18 ja x 4 42. Ratkaisu. Vastaavan homogeenisen

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivointitietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit

Lisätiedot

Ensimmäinen induktioperiaate

Ensimmäinen induktioperiaate Ensimmäinen induktioperiaate Olkoon P(n) luonnollisilla luvuilla määritelty predikaatti. (P(n) voidaan lukea luvulla n on ominaisuus P.) Todistettava, että P(n) on tosi jokaisella n N. ( Kaikilla luonnollisilla

Lisätiedot

Insinöörimatematiikka A

Insinöörimatematiikka A Insinöörimatematiikka A Mika Hirvensalo mikhirve@utu.fi Matematiikan ja tilastotieteen laitos Turun yliopisto 2018 Mika Hirvensalo mikhirve@utu.fi Luentoruudut 3 1 of 23 Kertausta Määritelmä Predikaattilogiikan

Lisätiedot

Ensimmäinen induktioperiaate

Ensimmäinen induktioperiaate 1 Ensimmäinen induktioperiaate Olkoon P(n) luonnollisilla luvuilla määritelty predikaatti. (P(n) voidaan lukea luvulla n on ominaisuus P.) Todistettava, että P(n) on tosi jokaisella n N. ( Kaikilla luonnollisilla

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

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 4 (verkkoluento 4) Aliohjelmien toteutus Luento 4 (verkkoluento 4) Aliohjelmien toteutus Tyypit, Parametrit Aktivaatiotietue (AT) AT-pino, rekursio 1 Aliohjelmatyypit Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri Parametrit

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Approbatur 3, demo 1, ratkaisut 1.1. A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Käydään kaikki vaihtoehdot läpi. Jos A on rehti, niin B on retku, koska muuten

Lisätiedot

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa.

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa. Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa. Vastaus 2. Vertaillaan

Lisätiedot

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }?

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Vastaus

Lisätiedot

1. Esitä rekursiivinen määritelmä lukujonolle

1. Esitä rekursiivinen määritelmä lukujonolle Matematiikan laitos Johdatus Diskrettiin Matematiikkaan Harjoitus 4 24.11.2011 Ratkaisuehdotuksia Aleksandr Pasharin 1. Esitä rekursiivinen määritelmä lukujonolle (a) f(n) = (2 0, 2 1, 2 2, 2 3, 2 4,...)

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I G. Gripenberg Aalto-yliopisto 3. huhtikuuta 2014 G. Gripenberg (Aalto-yliopisto) MS-A0402 Diskreetin matematiikan perusteetesimerkkejä,

Lisätiedot

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus Jakso 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet: aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I MS-A040 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I G. Gripenberg Aalto-yliopisto 3. huhtikuuta 014 G. Gripenberg (Aalto-yliopisto) MS-A040 Diskreetin matematiikan perusteetesimerkkejä,

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

Lisätiedot

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

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

Matematiikan peruskurssi 2

Matematiikan peruskurssi 2 Matematiikan peruskurssi Tentti, 9..06 Tentin kesto: h. Sallitut apuvälineet: kaavakokoelma ja laskin, joka ei kykene graaseen/symboliseen laskentaan Vastaa seuraavista viidestä tehtävästä neljään. Saat

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

811312A Tietorakenteet ja algoritmit 2015-2016. V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

811312A Tietorakenteet ja algoritmit 2015-2016. V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit 811312A Tietorakenteet ja algoritmit 2015-2016 V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit Sisältö 1. Johdanto 2. Leveyshaku 3. Syvyyshaku 4. Kruskalin algoritmi 5. Dijkstran algoritmi

Lisätiedot

Muodolliset kieliopit

Muodolliset kieliopit Muodolliset kieliopit Luonnollisen kielen lauseenmuodostuksessa esiintyy luonnollisia säännönmukaisuuksia. Esimerkiksi, on jokseenkin mielekästä väittää, että luonnollisen kielen lauseet koostuvat nk.

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Muuttujan X osoite on 230 Muuttujan X arvo on 12 Symbolin X arvo on 230 symbolit ovat yleensä

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento

Lisätiedot

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus Luento 4 Aliohjelmien toteutus Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio 1 Aliohjelmatyypit (2) Korkean tason ohjelmointikielen käsitteet aliohjelma, proseduuri parametrit funktio parametrit,

Lisätiedot

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Muuttujan X osoite on 230 Muuttujan X arvo on 12 Symbolin X arvo on 230 Tieto ja sen osoite

Lisätiedot