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.
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.
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]
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.)
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".
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: