SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
2.
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
2
3.
1. Racket-turtle ja listat
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
3
7.
Peruskuvioita Racket Turtlella
Ympyrä on monikulmio,
jossa on hyvin lyhyet sivut ja
erittäin monta kulmaa.
Montako?
7
8.
Kukkia Racket Turtlella
Kukan terälehti muodostuu kaaresta, joka on ympyrän osa...
8
9.
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:
9
11.
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°
11
12.
Higher Order Funktiot
Jos tehtävänä on tehdä ennalta tiedetty määrä toistoja, voidaan käyttää
Higher Order – funktioita toiston toteuttamiseen.
Higher Order – funktiot ovat funktioita, jotka voivat ottaa toisen
funktion argumenttina (tavalliset funktiot ovat First Order – funktioita).
Racket:in Higer Order – funktiot käsittelevät tietota listojen muodossa.
Higher Order – funktioita ovat mm. map, apply, filter, foldl, foldr ja
quicksort
12
13.
map
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. neliö-funktio (sqr)
(map sqr (list 1 2 3 4 5)) -> (list 1 4 9 16 25)
map:ille on aivan sama mitä funktio tekee ja mitä listassa on. Voimme esim.
tehdä listan tähtikuvia. Teemme ensin apufunktion tähti, jolla on yksi parametri
(koko):
(define (tähti koko)
(star koko ”solid” ”red”))
(map tähti (list 5 10 15 20 25 30))
->
13
Listassa tähtien koot
14.
apply
apply ottaa argumenttina funktion sekä listan arvoja, jotka syötetään ko.
funktiolle argumenteiksi. Apply palauttaa yhden arvon (ei listaa). Esim.
voisimme laskea yhteen listan alkiot:
(apply + (list 1 2 3 4 5 6 7)) -> 28
Myös tämä funktio voi käsitellä mitä tahansa arvoja esim. kuvia. Voimme
esim. tehdä sisäkkäisiä ympyröitä. Teemme ensin apufunktio ”ympyrä”:n
avulla listan eri kokoisia ympyröitä ja sitten laitamme ne päällekkäin
käyttämällä apply:ä ja overlay:tä:
(define (ympyrä koko)
(circle koko ”outline” ”black”))
(map ympyrä (list 5 10 15 20 25 30)) ->
(apply overlay
(map ympyrä (list 5 10 15 20 25 30))) ->
14
15.
foldl, foldr
foldl ja foldr toimivat myös funktioille, joilla on rajattu määrä argumentteja (vrt. + ja overlay
ottavat sisäänsä niin monta argumenttia kuin halutaan antaa). Tässä esimerkki, jossa place-image
sijoittaa kuvan annettuun koordinaattipisteeseen (x, y) annetun kuvan päälle. Tässä x ja y koordinaatit
sekä sijoitettavat kuvat voidaan antaa listoina (sama pituus) ja taustakuva toimii ns. pohja-arvona (vrt.
akkumulaattori). Nämä funktiot palauttavat yhden arvon (ei listaa). Liitä-kuva toimii apufunktiona
(hoitaa yhden kuvan).
(define SIJAINTI-X (list 122 48 20 15 104 112 99 100 148))
(define SIJAINTI-Y (list 132 17 20 53 82 51 132 31 101))
(define TÄHDET )
(define (liitä-kuva kuva x y pohja)
(place-image kuva x y pohja))
(foldl liitä-kuva (empty-scene 150 150 "black")
TÄHDET
SIJAINTI-X
SIJAINTI-Y)
15
”pohja-arvo”
16.
Turtle jatko –tehtävät (1)
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))
16
17.
Turtle jatko –tehtävät (2)
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)
17
18.
Vinkkejä viikkotehtävään (1)
Tärkeintä tällä viikolla on leikkiä,
kokeilla, ihmetellä ja pitää hauskaa.
Leiki väreillä ja muodoilla.
Voit tehdä kuviotaidetta joko Racket
Turtle:lla ja/tai 2htdp/image-kirjaston
ja map/apply/foldl/foldr/range –
avulla. Voit tehdä myös niin, että teet
ensin taustakuvan 2htdp/image-
kirjaston avulla ja asetat sen Racket
Turtlen taustakuvaksi ja piirrät vielä
Turtle-juttuja sen päälle. Ole luova!
18
19.
Vinkkejä viikkotehtävään (2)
19
Tässä on ensin tehty 2htdp/imagella
kuva ja piirretty Turtlella viivoja päälle
(taustakuva on toteutettu laittamalla
random kohtiin random kokoisia ja
värisiä laatioita rekursion avulla).
Muista, että Turtle kuvan taustavärin
voi vaihtaa, kynän voi nostaa ja
käyttää leimasinta, leimasin voi olla
lista kuvia (vaikkapa random värisiä ja
random kokoisia ympyröitä kuten
tässä).
Vain mielikuvitus on rajana!
0 likes
Be the first to like this
Views
Total views
2,507
On SlideShare
0
From Embeds
0
Number of Embeds
2,083
You have now unlocked unlimited access to 20M+ documents!
Unlimited Reading
Learn faster and smarter from top experts
Unlimited Downloading
Download to take your learnings offline and on the go
You also get free access to Scribd!
Instant access to millions of ebooks, audiobooks, magazines, podcasts and more.
Read and listen offline with any device.
Free access to premium services like Tuneln, Mubi and more.