Kun teet näitä harjoituksia, olet tavallaan oppilas: minä yritän opettaa sinulle, mitä Logolla voi tehdä, ja sinä yrität keksiä, mitä haluat tehdä. Kun nämä kaksi yhdistyvät, syntyy uutta. Sitä kutsutaan oppimiseksi. Mutta vaikka olet oppilas, olet samalla myös opettaja, sillä ohjelmointi on opettamista. Ohjelmoidessa opetetaan tietokoneelle, miten jotain tehdään. Komennot ovat tavallaan selityksiä, joita tietokone osaa ymmärtää. Olemme opettaneet Logon tekemään neliöitä, ympyröitä, ruusukkeita ja vaikka mitä.
Yksi asia opetuksestamme kuitenkin puuttuu: emme ole kertoneet Logolle, mitä olemme kulloinkin tekemässä. Lopputulos voi olla hyvinkin hieno kuvio, mutta Logo ei oikeastaan tiedä, mitä se on tehnyt sinun ohjauksessasi. Olisi parempi, jos voisimme opettaa Logolle, mitä esimerkiksi "kukka" tarkoittaa, koska sitten voisimme pyytää Logoa piirtämään kukkia aina, kun haluamme. Ei tarvitsisi joka kerta selittää Logolle erikseen, miten kukka piirretään.
Logolle voi tosiaan opettaa uusia komentoja. Se ei ole kovin vaikeaa. Oletetaan, että meillä on jokin ohjelma, joka on mielestämme opettamisen arvoinen, kuten vaikkapa tämä nuolen piirtävä ohjelma:
? et 100 ? va 135 ? et 50 ? va 135 ? et 71 ? va 135 ? et 50
Logo osaa toteuttaa sen, mutta jos haluamme tehdä sen uudestaan, pitää samat komennot antaa uudestaan. Nyt opetamme Logolle uuden komennon, joka piirtää tällaisen nuolen. Se näyttää tältä (">"-merkit ovat jälleen kehotteita eli niitä ei tarvitse kirjoittaa - Logo kirjoittaa ne kertoakseen, että olemme määrittelemässä uutta komentoa):
? miten nuoli > et 100 > va 135 > et 50 > va 135 > et 71 > va 135 > et 50 > valmis
Tässä on kaksi uutta komentoa: "miten" ja "valmis". Alussa oleva "miten nuoli" tarkoittaa, että nyt aiomme kirjoittaa selityksen siitä, miten tehdään nuoli. Sen jälkeen tulee komentoja, jotka yhdessä muodostavat nuolen. Koska Logo ei vielä tiedä, kuinka monta komentoa nuolen tekemiseen tarvitaan, pitää myös kertoa, milloin nuoli on valmis. Se kerrotaan komennolla "valmis".
Opeta nyt Logolle jokin oma kuviosi uutena komentona.
Miten-komento on kovin erilainen kuin tähän asti näkemämme komennot. Se ei tee mitään näytölle vaan tietokoneen muistille. Kirjoitettuasi yllä olevat komennot Logo ei lähde tekemään nuolia innoissaan, vaan kertoo vain painaneensa nyt mieleensä, mitä "nuoli" tarkoittaa. Mitä nuolilla tehdään, on sinun asiasi. Kokeillaanpa jotain:
? uusi ? nuoli ? toista 10 [nuoli] ? uusi ? toista 10 [nuoli ta 150]
Kuten huomaat, nuoli toimii aivan kuin muutkin komennot, joskaan ei ota syötettä eli sen perään ei kirjoiteta mitään lukua tai muutakaan. (Opimme myöhemmin, kuinka tehdään uusia komentoja, jotka syövät.)
Kokeile erilaisia yhdistelmiä nuoli-komennosta ja omasta uudesta komennostasi.
Meillä on nyt mahdollisuudet opettaa monia aikaisemmissa harjoituksissa tekemiämme kuvioita Logolle:
? miten neliö > toi 4 [et 100 oi 90] > valmis neliö määritelty ? miten ympyrä > toi 360 [et 1 oi 1] > valmis ympyrä määritelty ? miten kaario > toi 90 [et 1 oi 1] > valmis kaario määritelty ? miten kaariv > toi 90 [et 1 va 1] > valmis kaariv määritelty
Uusia komentoja voi tietenkin käyttää myös silloin, kun opettaa Logolle taas uusia komentoja. Voimme esimerkiksi käyttää kaariv-komentoa opettaaksemme Logolle, kuinka tehdään lehti:
? miten lehti > kaariv va 90 > kaariv va 90 > valmis lehti määritelty
Hae komentohistoriasta joitain aiemmin tekemiäsi kuvioita ja tee niistä komentoja.
Muistatko edellisen teeman moninkertaiset toista-komennot? Niitä on paljon helpompi hahmottaa, jos eri välivaiheille antaa nimet määrittelemällä ne uusina komentoina. Voit aina ensin kokeilla jotain kuviota ja sitten muuttaa sen komennoksi miten- ja valmis-komennoilla, tähän tapaan:
? uusi ? toista 7 [lehti oi 56] ? miten orvokki > toista 7 [lehti oi 56] > valmis orvokki määritelty
Ja seuraava, monimutkaisempi kuvio:
? uusi ? toista 9 [orvokki et 50] ? uusi ? toista 12 [orvokki ta 50] ? miten seppele > toista 12 [orvokki ta 50] > valmis seppele määritelty
Tee nyt itse esimerkiksi ympyröistä kukka ja kukista seppele, tai vaikkapa kuusikulmio, lumihiutale ja lumipallo.
Muutenkin monimutkaisemmat kuviot on helpompaa jakaa sopivan kokoisiksi osasiksi kuin yrittää kirjoittaa kerralla virheetöntä ohjelmaa, joka tuottaa koko kuvion. Ajatellaan vaikka, että haluan tehdä tikku-ukon, jolla on sormet ja varpaat. Lähdetään vaikkapa siitä, että määritetään, miltä sormet näyttävät:
? miten sormet > va 50 > toista 5 [et 30 ta 30 oi 20] > va 50 > valmis
Sitten määritellään raaja (siis käsi tai jalka):
? miten raaja > et 65 > sormet > ta 65 > valmis
Määrittelyt kannattaa muuten usein tehdä sellaisiksi, että lennokki on alussa ja lopussa samassa paikassa ja samassa asennossa. Tällaisia komentoja on paljon helpompaa käyttää apuna, kun tekee uusia komentoja. (Myöhemmin opimme lisää keinoja lennokin palauttamiseksi aiempaan paikkaan.)
Tässä on ohjelma, joka tekee vartalon:
? miten vartalo > oi 120 raaja > va 240 raaja > oi 120 ta 80 > oi 160 raaja > va 320 raaja > oi 160 et 80 > valmis vartalo määritelty
Sitten vielä pää:
? miten pää > va 90 > ympyrä > oi 60 > hyps 80 > oi 30 > silmät > valmis pää määritelty ? miten silmät > oi 45 > toista 2 [et 15 oi 90 et 15 va 90] > valmis silmät määritelty
Koko ukkeli koostuu sitten vain vartalosta ja päästä:
? miten ukkeli > vartalo > pää > valmis
Kokeile toteuttaa vastaavasti esimerkiksi poni.
Olen pyrkinyt tässä näyttämään, miten ylivoimaiseltakin tuntuva piirros on aika helposti tehtävissä ja ymmärrettävissä, kunhan sitä alkaa hajottaa osiin. Osat ovat pienempiä ja ohjelman rakenne on paremmin ymmärrettävissä. Ajattele, jos koko ukkeli olisi määritelty vain sarjana piirtokomentoja! Sen määrittely näyttäisi silloin tältä (älä missään nimessä vaivaudu kirjoittamaan tätä):
? miten ukkeli.josta.on.vaikea.saada.selvää > oi 120 > et 65 > va 50 > toista 5 [et 30 ta 30 oi 20] > va 50 > ta 65 > va 240 > et 65 > va 50 > toista 5 [et 30 ta 30 oi 20] > va 50 > ta 65 > oi 120 > ta 80 > oi 160 > et 65 > va 50 > toista 5 [et 30 ta 30 oi 20] > va 50 > ta 65 > va 320 > et 65 > va 50 > toista 5 [et 30 ta 30 oi 20] > va 50 > ta 65 > oi 160 > et 80 > va 90 > toi 360 [et 1 oi 1] > oi 60 > hyps 80 > oi 30 > oi 45 > toista 2 [et 15 oi 90 et 15 va 90] > valmis
Tee nyt muutamia kuvioita ja nimeä ne. Ennen harjoituksen loppua kerron vielä, että määrittelyissä on vielä yksi hyvä puoli: ne voi tallentaa. Anna seuraava komento (huomaa yksinäinen lainausmerkki sanan alussa!):
? tallenna "harkat3
Tämä vie tekemäsi määritelmät tiedostoon nimeltä "harkat3". Ne saa myöhemmin taas käyttöön komennolla:
? lataa "harkat3
Tallennettuasi voit siirtyä seuraavaan teemaan.
Teema 4: Kertaa kerta kerta kertaa
Pikalinkit: