3. Racket Turtle
Listojen, rekursion sekä Higher Order -funktioiden opetteluun kehitetty
kirjasto
(require teachpacks/racket-turtle)
Vaatii teachpacks – paketin asentamisen (WeSchemessä eri nimi!)
Tarjoaa helpon tavan kokeilla toistoa (repeat)
Sisältää peilauksen sekä laimasintoiminnon
3
4. 1. Peruskomennot
Turtlea ohjataan komentolistoilla, jotka annetaan ”draw” tai
”draw-step-by-step”-funktioille
Komentolista on muotoa (list (…)(…)(…))
Racket-turtlen peruskomennot ovat:
◦ forward
◦ turn-left,turn-right
◦ repeat
◦ pen-up, pen-down
◦ go-to
◦ change-color
4
10. 2. Muuttujat ja funktiot
Turtle – komentolistoja voi muodostaa myös funktioiden avulla. Voimme
tehdä erikokoisia ja värisiä kolmioita tekevän komentolistan
muodostavan funktion: tee-kolmio. Muuttujat (parametrit) olisivat
sivu ja väri.
Esim. (tee-kolmio 100 ”red”) palauttaisi komentolistan, joka
toteuttaa tämän kuvan:
10
12. Monikulmiot funktion avulla
Voit tehdä edellisen harjoituksen myös funktioiden avulla (kulmien määrä
on nyt parametrina)
(define (tee-monikulmio sivu kulmat väri)
… )
Vihje 1: käytä apuna tee-sivu –apufunktiota
Vihje 2: koko kuviossa pitää kääntyä yhteensä 360°
12
13. 3. Toistorakenteet
Racket Turtlella voidaan tehdä kuvioita, jotka sisältävät toistoa joko
käyttämällä rekursiivisia funktioita tai Higher Order –funktioita.
Erityisen kätevä on map käytettynä range:n kanssa.
map on Higher Order – funktio, joka ottaa argumenttina funktion sekä
listan ja syöttää listan alkiot yksi kerrallaan funktiolle. map palauttaa
saadut paluuarvot listan muodossa. Esim. Tähtilista:
(define (tähti koko)
(star koko ”solid” ”red”))
(map tähti (range 5 35 5))
13
Listassa tähtien koot
14. Turtle spiraali - rekursiolla
Kuvan spiraalin voi tehdä kahdella eri tavalla
A) Rekursiivinen ratkaisu
(define (sivu s)
(list (forward s) (turn-left 90)))
(define (spiraali matka max)
(if (>= matka max)
empty
(cons (sivu matka) (spiraali (+ matka 5) max))))
(draw (spiraali 5 300))
14
15. Turtle spiraali – map:llä
B) Ratkaisu Higher Order – funktioiden avulla
(define (sivu s)
(list (forward s) (turn-left 90)))
(define SPIRAALI (map sivu (range 5 300 5)))
(draw SPIRAALI)
15
16. Leimasinlista
Turtlelle voidaan antaa lista kuvia
leimasimeksi. Kuvassa oleva
tähtispiraali on saatu aikaan
poistamalla kynä ja lisäämällä
tilalle leimasinlista, jossa on
kasvavia tähtiä.
...
(stamper-on TÄHDET)
16