(toiminnot)

hwechtla-tl: Teema 6: syötteitä, tuloksia, tyyppejä

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


Viime teemassa olen puhunut paljon komentojen "tuloksista" kertomatta, mitä se oikeastaan tarkoittaa. Nyt seuraa aika pitkä ja perinpohjainen selitys, mutta ainakin siitä on loppujen lopuksi paljon hyötyä, kun haluaa ymmärtää, miten tietokonetta käsketään. Jos et halua ymmärtää asioita, hyppää tämän osan yli.

Harjoitus 6a: tulos korvaa komennon

Mutta asiaan siis, tuloksiin. Tarkastellaanpa seuraavia komentoja:

? sano 45 + 90
? oikealle 45 + 90
? toista 45 + 90 [et 1 va 1]

135 on yhteenlaskun 45 + 90 tulos. Jos kirjoitan johonkin kohtaan komentoa 45 + 90, komento toimii aivan kuin olisin kirjoittanut sen sijaan 135. Tulos tarkoitaa käytännössä tätä: kun komennon osa tuottaa jonkin tuloksen, tämä osa ikään kuin korvautuu tuloksellaan. Kun siis annamme vaikkapa tällaisen komennon:

? muutenvaan kysy [onko kivaa?]

Ja kirjoitamme vastaukseksi "ponimaisen kivaa", niin ohjelmamme käyttäytyy, ikään kuin komento olisikin ollut:

? muutenvaan [ponimaisen kivaa]

... sillä [ponimaisen kivaa] on kysy-komennon tulos. Kuten sanoin, muutenvaan-komento ei tee tällä tuloksella mitään vaan nielaisee sen pois maailmasta.

Harjoitus 6b: käytetään vastauksia (edes) johonkin

Mutta totta kai voimme tehdä kysymysten vastauksilla jotain muutakin. Kokeile esimerkiksi tätä:

? sano kysy [Mitä haluaisit juuri nyt kuulla?]
Mitä haluaisit juuri nyt kuulla? sulomusiikkia
sulomusiikkia

Miksi Logo sanoi "sulomusiikkia"? Koska kysy-komennon tulos on [sulomusiikkia], joten oikeastaan on kuin olisimme kirjoittaneet tällaisen komennon:

? sano [sulomusiikkia]
sulomusiikkia

Mitäs muuta voisimme vielä tehdä vastauksilla? Ainakin ne voidaan suorittaa Logo-komentoina. Kokeilepa tätä:

? tee kysy [Anna komento:]
Anna komento: taakse 50

Logo toteutti "taakse 50"-komennon, koska tee-komento suorittaa komentona mitä vain, mitä sille annetaan; ikään kuin olisimme kirjoittaneet komennon:

? tee [taakse 50]

Harjoitus 6c: sanojen kaivaminen vastauksista

Voimme myös esimerkiksi ottaa vastauksesta ensimmäisen sanan. Kokeilepa:

? sano eka kysy [Mikä on nimesi?]
Mikä on nimesi? Hildegaard von Bingen
Hildegaard

Mitä tässä tapahtuu? Ensin kysy-komento tuottaa tulokseksi sanat [Hildegaard von Bingen]. Tällöin komento on ikään kuin olisimme kirjoittaneet:

? sano eka [Hildegaard von Bingen]

Komento "eka" ottaa monta sanaa ja antaa niistä ensimmäisen tulokseksi. Nyt siis asiat ovat ikään kuin olisimme kirjoittaneet:

? sano "Hildegaard

Tällainen toimintatapa, jossa yhden komennon tulos on toisen syöte, on hyvin yleinen. Nyt kysy-komento tuottaa tuloksen, joka menee syötteeksi eka-komennolle, ja eka-komento tuottaa tuloksen, joka menee syötteeksi sano-komennolle.

Jos jonkin komennon tulos on luku, niin komennon voi kirjoittaa mihin tahansa kohtaan, johon voisi kirjoittaa luvun. Esimerkiksi näin:

? eteen eka kysy [Kuinka paljon mennään?]
Kuinka paljon mennään? 10000

Lennokki menee 10000 askelta eteenpäin, koska vastauksen kanssa komento on kuin olisimme kirjoittaneet "eteen eka [10000]", joka taas on sama kuin "eteen 10000". (Vihje: usein, jos haluat kohdella vastausta numerona, kannattaa ottaa sen ensimmäinen sana eka-komennolla.)

Harjoitus 6d: kahden kysymyksen tulokset yhdistyvät

Samoin tässä on korvattu luvut plus-merkin molemmilta puolilta kysymyksillä:

? sano (eka kysy [Anna luku summattavaksi:]) + (eka kysy [Anna toinenkin:])
Anna luku summattavaksi: 30
Anna toinenkin: 15
45

Kun molemmat kysymykset on kysytty, on tilanne, ikään kuin olisimme kirjoittaneet:

? sano (eka [30]) + (eka [15])

Tämä puolestaan on sama kuin "sano 30 + 15", joka on sama kuin "sano 45".

Harjoitus 6e: vastausten vertailu

Palataan nyt tähän komentoon:

? sano samatko kysy [2+2?] [4]

Kun olet kirjoittanut vastauksen, se tulee tuttuun tapaan kysy-komennon tilalle. Komento "samatko" ottaa kaksi syötettä ja vertaa, ovatko ne samat keskenään. Sen tulos on "joo" tai "ei" sen mukaan, ovatko syötteet samat. Jos siis kirjoitan vastaukseksi "52", komento vastaa tätä komentoa:

? sano samatko [52] [4]

Koska [52] ei ole sama kuin [4], komento on itse asiassa tällainen:

? sano "ei

... ja niin Logo myös sanoo.

XXX TODO


Pikalinkit:


kommentoi (viimeksi muutettu 18.04.2014 22:43)