SlideShare a Scribd company logo
1 of 32
Racket
2. VIIKKO
Funktio
2
Funktion kÀsite tulee
matematiikasta
KOODIAAPINEN MOOC - SYKSY 2015
MÄÄRITTELYJOUKKO ARVOJOUKKO
3 9
neliö-funktio
-3
Funktio toimii aina samalla tavalla samalle syötteelle.
neliö : Luku -> Luku
𝑓 đ‘„ = đ‘„2
Funktio muuttaa syötteet
(argumentit) paluuarvoksi
4
ympyrÀ
funktio
ARGUMENTIT
100
”black”
PALUUARVO
ympyrÀ : Luku VÀri -> Kuva
Funktion sisÀiset muuttujat
ovat nimeltÀÀn parametreja
5
ARGUMENTIT
100
PALUUARVO
”black”
r
vÀri
MUUTTUJAT
(PARAMETRIT)
(𝑐𝑖𝑟𝑐𝑙𝑒 𝑟 "solid" đ‘ŁĂ€đ‘Ÿđ‘–)
Funktion mÀÀrittely
6
(define (ympyrÀ r vÀri)
(circle r ”solid” vĂ€ri))
Funktio on alkeisohjelma
KOODIAAPINEN MOOC - SYKSY 2015
Funktion suunnitteluportaat
0) SelvitÀ itsellesi mitÀ funktiosi tekee: kirjoita tarkoitus kommenttiriville.
1) Keksi funktiollesi kuvaava nimi, listaa millaista muuttuvaa tietoa se
kÀsittelee ja millaista tietoa se tuottaa: kirjoita esittely kommenttiriville.
2) Kirjoita funktiollesi runko (stub): keksi muuttujille
(parametreille) kuvaavat nimet ja aseta paluuarvoksi ”jotain”.
3) Kirjoita funktion kÀytölle esimerkit/testit (check-
expect), kÀyttÀmÀllÀ konkreettisia arvoja. Testaa.
4) Kirjoita funktion toteutus. Testaa.
Funktion suunnittelu
Funktion koodaaminen suoraan, ilman suunnittelua on vaikeaa. Siksi seuraamme
funktion suunnitteluportaat – ohjetta ja jaamme suunnittelun pieniin vaiheisiin, jotka
ovat aloittelijallekin helppoja.
0. tarkoitus: kirjoita lyhyt kuvaus siitÀ mitÀ funktiosi tekee (vaihtoehtoisesti selitÀ
tÀmÀ kaverillesi sanallisesti.) PÀÀasia, ettÀ ymmÀrrÀt mitÀ olet tekemÀssÀ.
1. esittely: keksi funktiolle nimi, listaa tarvittavien muuttujien tietotyypit ja pÀÀtÀ
mitÀ tietotyyppiÀ funktiosi palauttaa
2. runko (stub): keksi muuttujille nimet, ja kirjoita ”tyhmĂ€ funktio” eli stub, joka ei
vielÀ tee mitÀÀn jÀrkevÀÀ mutta joka ottaa vastaan argumentteja ja palauttaa oikeaa
tyyppiĂ€ olevan ”tyhmĂ€n” vastauksen esim. 0 (luku) tai empty-image (kuva).
3. esimerkit: kirjoita esimerkkejÀ miten funktiotasi voisi kutsua, ja mitÀ se tulee
palauttamaan (check-expect). Testaa painamalla ”run” -> testien pitÀÀkin
epĂ€onnistua, koska kĂ€ytössĂ€ on tyhmĂ€ ”stub”.
4. koodi: kirjoita nyt funktiosi. Jatka stub:in koodi loppuu kÀyttÀmÀllÀ esimerkkejÀ
apunasi. Usein esimerkin koodin voi kopioida suoraan funktion toteutukseksi
sijoittamalla muuttujien nimet oikeille kohdille. Testaa funktiosi painamalla ”run” ->
testien pitÀisi onnistua, jos funktio on koodattu oikein.
9
Esimerkki: ympyrÀ-funktio
1) PÀÀtetÀÀn funktion nimi (ympyrÀ), sen muuttujien tyypit (Luku, VÀri) ja paluuarvon tyyppi (Kuva)
;; ympyrÀ : Luku VÀri -> Kuva
2) Annetaan funktion muuttujille nimet (r, vÀri):
(define (ympyrÀ r vÀri)
empty-image) ; stub
3) SelvitetÀÀn esimerkkien avulla miten se toimii:
(check-expect (ympyrĂ€ 50 ”black”)
(circle 50 ”solid” ”black”)),
(check-expect (ympyrĂ€ 60 ”red”)
(circle 60 ”solid” ”red”))
4) Kirjoitetaan funktio loppuun (jatketaan stub loppuun), korvaa vakiot muuttujanimillÀ (r ja vÀri):
(define (ympyrÀ r vÀri)
(circle r ”solid” vĂ€ri))
10
YmpyrÀ-funktion kÀyttÀminen
11
(overlay (ympyrÀ 20 "black")
(ympyrÀ 40 "white")
(ympyrÀ 60 "black")
(ympyrÀ 80 "white")
(ympyrÀ 100 "black"))
Konkretiasta abstraktioon
Konkretia (esimerkit/testit):
(check-expect (neliö 4)
(* 4 4))
(check-expect (neliö -3)
(* -3 -3))
Abstraktio (funktio):
(define (neliö x)
(* x x))
KOODIAAPINEN MOOC - SYKSY 2015
4
-3
16
9
x x2
Funktio, joka palauttaa luvun
13
ARGUMENTIT
400
PALUUARVO
25
10 000
x
y
MUUTTUJAT
(PARAMETRIT)
đ‘„ ∙ 𝑩
Esimerkki: pinta-ala-funktio
1) PÀÀtetÀÀn funktion nimi : sen parametrien tyypit -> paluuarvon tyyppi
;; pinta-ala : Luku Luku -> Luku
2) Annetaan funktiolle ja sen parametreille nimet (stub):
(define (pinta-ala x y)
0) ; stub
3) SelvitetÀÀn esimerkkien avulla miten se toimii:
(check-expect (pinta-ala 400 25) (* 400 25))
(check-expect (pinta-ala 100 50) (* 100 50))
4) Kirjoitetaan funktio loppuun (jatketaan stubia):
(define (pinta-ala x y)
(* x y))
14
Funktio, joka palauttaa
likiarvon
15
ARGUMENTIT
40
PALUUARVO
10
12566,37061
4359172953
8505735331
18
h
r
MUUTTUJAT
(PARAMETRIT)
Ï€đ‘Ÿ2
∙ ℎ
Esimerkki: ympyrÀlieriön-
tilavuus-funktio
1) PÀÀtetÀÀn funktion nimi : sen parametrien tyypit -> paluuarvon tyyppi
;; ympyrÀlieriön-tilavuus : Luku Luku -> Luku
2) Annetaan funktiolle ja sen parametreille nimet (stub):
(define (ympyrÀlieriön-tilavuus h r)
0)
3) SelvitetÀÀn esimerkkien avulla miten se toimii:
(check-within (ympyrÀlieriön-tilavuus 400 25)
(* 400 (* pi (sqr 25)))
0.001)
(check-within (ympyrÀlieriön-tilavuus 100 50)
(* 100 (* pi (sqr 50)))
0.001)
4) Kirjoitetaan funktio loppuun (jatketaan stubia):
(define (ympyrÀlieriön-tilavuus h r)
(* h (* pi (sqr r))))
16
Huom! Check-expect
ei toimi tÀssÀ, koska
π:n arvo on likiarvo.
Likiarvoja sisÀltÀviÀ
tuloksia pitÀÀ testata
kÀyttÀmÀllÀ check-
within – funktiota,
jolle annetaan
tarkkuus kolmantena
argumenttina.
Stub:in tyhmÀt paluuarvot
Tietotyyppi TyhmÀ paluuarvo
Luku 0
Merkkijono ””
Kuva empty-image
KOODIAAPINEN MOOC - SYKSY 2015
Jotta check-expect – lauseet voidaan ajaa, funktiosta on oltava olemassa ”tyhmĂ€
mÀÀrittely” (stub). Koska funktion on aina palautettava jotain myös stub:in on
palautettava ”jotain tyhmĂ€Ă€â€ mutta oikean tyyppistĂ€. Voit kĂ€yttÀÀ esim. NĂ€itĂ€
arvoja stub:in paluuarvoina:
Sanasto
Koodarin kÀsikirjasta löytyy sanasto
KÀytÀ sitÀ hyvÀksesi kun törmÀÀt sinulle uuteen termiin. Toisen viikon
uudet termit:
ARVOJOUKKO
FUNKTIO
FUNKTION SUUNNITTELUPORTAAT
KOMMENTTI
PARAMETRI
MÄÄRITTELYJOUKKO
KOODIAAPINEN MOOC - SYKSY 2015
VinkkejÀ viikon
palautustehtÀvÀÀn
TÀllÀ viikolla prosessi on tÀrkeÀmpi kuin lopputulos. Tarkoitus on
suunnitella tyhjÀstÀ yksi funktio, joka tekee jotain hyödyllistÀ. TÀmÀ on
ensimmÀinen yksinkertainen ohjelmasi, jonka suunnittelet, toteutat ja
testaat. TÀssÀ kÀydÀÀn siis lÀpi minimittakaavassa oikean
ohjelmistoprojektin vaiheet. Huomaa, ettÀ suunnittelu on isompi (ja
vaikeampi prosessi), kuin toteutus ja testaus.
KOODIAAPINEN MOOC - SYKSY 2015
Suunnittelu:
0) Tarkoitus
1) Esittely
2) Runko (stub)
3) Esimerkit/testit
Toteutus:
4) Funktion toteutus
ja testaus
VinkkejÀ viikon
palautustehtÀvÀÀn
Funktio on hyvÀ funktio, kun se tekee vain yhden asian. Jos tavoittelet
monimutkaista funktiota, joka tekee kaksi asiaa, sinun pitÀisi tehdÀ kaksi
erillistÀ funktiota. Jos nÀyttÀÀ siltÀ, ettÀ viikkotehtÀvÀsi paisuu yli kolmen
funktion, suosittelen tehtÀvÀn rajaamista! Toki jos intoa riittÀÀ,
pidemmÀllekin saa mennÀ. TÀrkeintÀ on, ettÀ osaat tunnistaa muuttuvia
asioita ja vakioita sekÀ osaat suunnitella esimerkit/testit funktiolle. PidÀ
mielessÀ sama periaate kuin ensimmÀisellÀ viikolla: tee paloissa. Pieni,
yksinkertainen apufunktio on helppo suunnitella, koodata ja testata. Iso
monimutkainen funktio on sitten helppo koostaa valmiista
apufunktioista.
KOODIAAPINEN MOOC - SYKSY 2015
funktio
apufunktio1
apufunktio2
Racket
DEBUGGAUS
Palaa tÀhÀn kohtaan, kun törmÀÀt virheilmoituksiin!
MistÀ virheilmoitukset voivat
johtuvat?
KOODIAAPINEN MOOC - SYKSY 2015
Virheilmoitus SyitÀ
define: expected at least one variable after the function
name, but found none
Esimerkki
define: expected only one expression after the variable name
neliö, but found 1 extra part
Esimerkki
a: this variable is not defined Esimerkki(1)
Esimerkki(2)
check-expect: expects 2 arguments, but found only 1 Esimerkki
define: expected only one expression for the function body,
but found 2 extra parts
Esimerkki(1)
Esimerkki(2)
Esimerkki(3)

 this function is not defined Esimerkki
Debuggaus:
define: expected at least one
variable after the function name

KOODIAAPINEN MOOC - SYKSY 2015
Racket BSL – kielessĂ€ ei sallita
funktioita, joilla ei ole yhtÀÀn
parametria (muuttujaa).
LisÀÀ funktiollesi vÀhintÀÀn yksi
parametri:
(define (neliö a)
0)
ja paina ”run”.
Huom! TĂ€mĂ€ on ”stub” (ei tee mitÀÀn
ÀlykÀstÀ).
Debuggaus:
define: expected only one expression
after the variable name 

KOODIAAPINEN MOOC - SYKSY 2015
Koska define:llÀ voidaan mÀÀritellÀ
myös muuttuja (vakio) tÀmÀ
tulkitaan vÀÀrÀnlaiseksi muuttujan
arvon asettamiseksi (neliö sanan
jÀlkeen on kaksi lauseketta a ja 0,
kun pitÀisi olla vain yksi).
LisÀÀ sulut funktion nimen ja
parametrin ympÀrille:
(define (neliö a)
0)
ja paina ”run”.
Huom! TĂ€mĂ€ on ”stub” (ei tee mitÀÀn
ÀlykÀstÀ).
Debuggaus:
a: this variable is not defined (1)
KOODIAAPINEN MOOC - SYKSY 2015
Parametriin (muuttujaan) a voidaan
viitata vain funktion sisÀllÀ. TÀssÀ
siihen viitataan sen ulkopuolella,
jonne se ei ”nĂ€y”. Check-expect
lauseissa pitÀÀ kÀyttÀÀ valittuja
esimerkkiarvoja.
LisÀÀ a:n tilalle tÀssÀ valittu
esimerkkiluku 45:
(check-expect (neliö 45)
(* 45 45))
ja paina ”run”.
Debuggaus:
a: this variable is not defined (2)
KOODIAAPINEN MOOC - SYKSY 2015
Parametriin (muuttujaan) a voidaan
viitata vain funktion sisÀllÀ. TÀssÀ
siihen viitataan sen ulkopuolella,
jonne se ei ”nĂ€y”. Check-expect
lauseissa pitÀÀ kÀyttÀÀ valittuja
esimerkkiarvoja.
LisÀÀ a:n tilalle tÀssÀ valittu
esimerkkiluku 45:
(check-expect (neliö 45)
(* 45 45))
ja paina ”run”.
Debuggaus:
a: this variable is not defined (2)
KOODIAAPINEN MOOC - SYKSY 2015
Parametriin (muuttujaan) a voidaan
viitata vain funktion sisÀllÀ. TÀssÀ
siihen viitataan sen ulkopuolella,
jonne se ei ”nĂ€y”. Check-expect
lauseissa pitÀÀ kÀyttÀÀ valittuja
esimerkkiarvoja.
LisÀÀ a:n tilalle tÀssÀ valittu
esimerkkiluku 45:
(check-expect (neliö 45)
(* 45 45))
ja paina ”run”.
Debuggaus:
check-expect: expects 2 arguments,
but found only 1
KOODIAAPINEN MOOC - SYKSY 2015
Check-expect – funktio ottaa kaksi
argumenttia. EnsimmÀinen kutsuu
testattavaa funktiota (neliö), ja
toinen tuottaa esimerkkiarvon,
johon uuden funktion paluuarvoa
verrataan. TÀssÀ jÀlkimmÀinen
”odotusarvo” on unohtunut pois.
LisÀÀ ”odotusarvo”:
(check-expect (neliö 45)
(* 45 45))
ja paina ”run”.
Debuggaus:
define: expected only one expression
for the function body, but found 2
(1)
KOODIAAPINEN MOOC - SYKSY 2015
Funktion pitÀÀ palauttaa aina yksi
lauseke. TÀllÀ yhden lausekkeen
sijaan tulkitaan olevan kolme a, * ja
a. Racket – lauseke muodostettiin
sulkumerkkien avulla ja funktion
nimi kirjoitetaan heti ”sulkuauki”-
merkin jÀlkeen.
LisÀÀ sulut ja siirrÀ funktion nimi
oikealle paikalle:
(define (neliö a)
(* a a))
a paina ”run”.
Debuggaus:
define: expected only one expression
for the function body, but found 2
(2)
KOODIAAPINEN MOOC - SYKSY 2015
Funktion pitÀÀ palauttaa aina yksi
lauseke. TÀssÀ funktion sisÀllÀ on
kaksi erillistĂ€ Racket – lauseketta:
stub-koodi (0) sekÀ lopullinen
funktion toteutus (* a a).
Poista stub-koodi:
(define (neliö a)
(* a a))
a paina ”run”.
Debuggaus:
define: expected only one expression
for the function body, but found 2
(3)
KOODIAAPINEN MOOC - SYKSY 2015
Funktion pitÀÀ palauttaa aina yksi
lauseke. TÀssÀ funktion sisÀllÀ on
kaksi erillistĂ€ Racket – lauseketta.
YhdistÀ erilliset lausekkeet (tai
poista turha lauseke):
(define (neliö a)
(number->string(* a a)))
a paina ”run”.
Debuggaus:

 this function is not defined
KOODIAAPINEN MOOC - SYKSY 2015
Check-expect – lauseke testaa
neliö-funktiota mutta tÀssÀ sitÀ ei
ole mÀÀritetty.
LisÀÀ neliö-funktion mÀÀrittely
(vĂ€hintÀÀn ”tyhmĂ€â€ stub):
(define (neliö a)
0)
a paina ”run”.

More Related Content

What's hot

Racket MOOC (kevÀt 2016) - jakso 4
Racket MOOC (kevÀt 2016) -  jakso 4Racket MOOC (kevÀt 2016) -  jakso 4
Racket MOOC (kevÀt 2016) - jakso 4Tiina Partanen
 
Racket MOOC - jakso 3
Racket MOOC - jakso 3Racket MOOC - jakso 3
Racket MOOC - jakso 3Tiina Partanen
 
Racket MOOC - jakso 6
Racket MOOC -  jakso 6Racket MOOC -  jakso 6
Racket MOOC - jakso 6Tiina Partanen
 
Racket jatko 6. Listat
Racket jatko 6. ListatRacket jatko 6. Listat
Racket jatko 6. ListatTiina Partanen
 
Racket perusteet - Sovellukset A
Racket perusteet - Sovellukset ARacket perusteet - Sovellukset A
Racket perusteet - Sovellukset ATiina Partanen
 
Racket MOOC - jakso 5
Racket MOOC - jakso 5Racket MOOC - jakso 5
Racket MOOC - jakso 5Tiina Partanen
 
C# nykyiset kipupisteet
C# nykyiset kipupisteetC# nykyiset kipupisteet
C# nykyiset kipupisteetTuomas Hietanen
 

What's hot (8)

Racket MOOC (kevÀt 2016) - jakso 4
Racket MOOC (kevÀt 2016) -  jakso 4Racket MOOC (kevÀt 2016) -  jakso 4
Racket MOOC (kevÀt 2016) - jakso 4
 
Racket MOOC - jakso 3
Racket MOOC - jakso 3Racket MOOC - jakso 3
Racket MOOC - jakso 3
 
Racket Turtle
Racket TurtleRacket Turtle
Racket Turtle
 
Racket MOOC - jakso 6
Racket MOOC -  jakso 6Racket MOOC -  jakso 6
Racket MOOC - jakso 6
 
Racket jatko 6. Listat
Racket jatko 6. ListatRacket jatko 6. Listat
Racket jatko 6. Listat
 
Racket perusteet - Sovellukset A
Racket perusteet - Sovellukset ARacket perusteet - Sovellukset A
Racket perusteet - Sovellukset A
 
Racket MOOC - jakso 5
Racket MOOC - jakso 5Racket MOOC - jakso 5
Racket MOOC - jakso 5
 
C# nykyiset kipupisteet
C# nykyiset kipupisteetC# nykyiset kipupisteet
C# nykyiset kipupisteet
 

More from Tiina Partanen

Computational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of MathematicsComputational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of MathematicsTiina Partanen
 
Racket mooc 2017 - yleistÀ
Racket mooc 2017 -  yleistÀRacket mooc 2017 -  yleistÀ
Racket mooc 2017 - yleistÀTiina Partanen
 
Racket mooc 2017 - aikataulu
Racket mooc 2017 -  aikatauluRacket mooc 2017 -  aikataulu
Racket mooc 2017 - aikatauluTiina Partanen
 
Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Tiina Partanen
 
Ohjelmoinnin historiaa
Ohjelmoinnin historiaaOhjelmoinnin historiaa
Ohjelmoinnin historiaaTiina Partanen
 
Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)Tiina Partanen
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteTiina Partanen
 
Kurkistus koodaukseen
Kurkistus koodaukseenKurkistus koodaukseen
Kurkistus koodaukseenTiina Partanen
 
Racket MOOC jakso 7
Racket MOOC jakso 7Racket MOOC jakso 7
Racket MOOC jakso 7Tiina Partanen
 
Racket MOOC 2016 - yleistÀ (SYKSY)
Racket MOOC 2016 - yleistÀ (SYKSY)Racket MOOC 2016 - yleistÀ (SYKSY)
Racket MOOC 2016 - yleistÀ (SYKSY)Tiina Partanen
 
Legorobottialkeet
LegorobottialkeetLegorobottialkeet
LegorobottialkeetTiina Partanen
 
Koodauksen ensiaskeleet
Koodauksen ensiaskeleetKoodauksen ensiaskeleet
Koodauksen ensiaskeleetTiina Partanen
 
Racket MOOC - viikko 6
Racket MOOC - viikko 6Racket MOOC - viikko 6
Racket MOOC - viikko 6Tiina Partanen
 
Racket jatko 7. oppitunti
Racket jatko 7. oppituntiRacket jatko 7. oppitunti
Racket jatko 7. oppituntiTiina Partanen
 
Koodiaapinen MOOC - Racket
Koodiaapinen MOOC - RacketKoodiaapinen MOOC - Racket
Koodiaapinen MOOC - RacketTiina Partanen
 

More from Tiina Partanen (16)

Computational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of MathematicsComputational Thinking as an Emergent Learning Trajectory of Mathematics
Computational Thinking as an Emergent Learning Trajectory of Mathematics
 
Racket mooc 2017 - yleistÀ
Racket mooc 2017 -  yleistÀRacket mooc 2017 -  yleistÀ
Racket mooc 2017 - yleistÀ
 
Racket mooc 2017 - aikataulu
Racket mooc 2017 -  aikatauluRacket mooc 2017 -  aikataulu
Racket mooc 2017 - aikataulu
 
Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)Racket materiaali (Koodausta kouluun - projekti)
Racket materiaali (Koodausta kouluun - projekti)
 
Ohjelmoinnin historiaa
Ohjelmoinnin historiaaOhjelmoinnin historiaa
Ohjelmoinnin historiaa
 
Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)Racket MOOC 2016 aikataulu (SYKSY)
Racket MOOC 2016 aikataulu (SYKSY)
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynote
 
Kurkistus koodaukseen
Kurkistus koodaukseenKurkistus koodaukseen
Kurkistus koodaukseen
 
Racket MOOC jakso 7
Racket MOOC jakso 7Racket MOOC jakso 7
Racket MOOC jakso 7
 
Racket MOOC 2016 - yleistÀ (SYKSY)
Racket MOOC 2016 - yleistÀ (SYKSY)Racket MOOC 2016 - yleistÀ (SYKSY)
Racket MOOC 2016 - yleistÀ (SYKSY)
 
Legorobottialkeet
LegorobottialkeetLegorobottialkeet
Legorobottialkeet
 
Lapset koodaa?
Lapset koodaa?Lapset koodaa?
Lapset koodaa?
 
Koodauksen ensiaskeleet
Koodauksen ensiaskeleetKoodauksen ensiaskeleet
Koodauksen ensiaskeleet
 
Racket MOOC - viikko 6
Racket MOOC - viikko 6Racket MOOC - viikko 6
Racket MOOC - viikko 6
 
Racket jatko 7. oppitunti
Racket jatko 7. oppituntiRacket jatko 7. oppitunti
Racket jatko 7. oppitunti
 
Koodiaapinen MOOC - Racket
Koodiaapinen MOOC - RacketKoodiaapinen MOOC - Racket
Koodiaapinen MOOC - Racket
 

Recently uploaded

TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24
TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24
TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24Matleena Laakso
 
ValkohÀntÀpeura (Odocoileus virginianus).pptx
ValkohÀntÀpeura (Odocoileus virginianus).pptxValkohÀntÀpeura (Odocoileus virginianus).pptx
ValkohÀntÀpeura (Odocoileus virginianus).pptxpurmonen8
 
TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24
TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24
TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24Matleena Laakso
 
TekoÀly ja opinto-ohjaus, webinaari 26.4.24
TekoÀly ja opinto-ohjaus, webinaari 26.4.24TekoÀly ja opinto-ohjaus, webinaari 26.4.24
TekoÀly ja opinto-ohjaus, webinaari 26.4.24Matleena Laakso
 
Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24
Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24
Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24Matleena Laakso
 

Recently uploaded (6)

TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24
TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24
TekoÀly opetuksessa, opettajien kevÀtpÀivÀ 26.4.24
 
ValkohÀntÀpeura (Odocoileus virginianus).pptx
ValkohÀntÀpeura (Odocoileus virginianus).pptxValkohÀntÀpeura (Odocoileus virginianus).pptx
ValkohÀntÀpeura (Odocoileus virginianus).pptx
 
TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24
TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24
TekoÀlyÀ koulunkÀynninohjaajille. Jyty 27.4.24
 
TekoÀly ja opinto-ohjaus, webinaari 26.4.24
TekoÀly ja opinto-ohjaus, webinaari 26.4.24TekoÀly ja opinto-ohjaus, webinaari 26.4.24
TekoÀly ja opinto-ohjaus, webinaari 26.4.24
 
Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24
Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24
Opettaja ja tekoÀly. PedaiiltapÀivÀ 25.4.24
 
Koulutuksen palkat ja kustannukset sekÀ koulutuksen ansiot
Koulutuksen palkat ja kustannukset sekÀ koulutuksen ansiotKoulutuksen palkat ja kustannukset sekÀ koulutuksen ansiot
Koulutuksen palkat ja kustannukset sekÀ koulutuksen ansiot
 

Racket mooc - viikko 2

  • 3. Funktion kĂ€site tulee matematiikasta KOODIAAPINEN MOOC - SYKSY 2015 MÄÄRITTELYJOUKKO ARVOJOUKKO 3 9 neliö-funktio -3 Funktio toimii aina samalla tavalla samalle syötteelle. neliö : Luku -> Luku 𝑓 đ‘„ = đ‘„2
  • 4. Funktio muuttaa syötteet (argumentit) paluuarvoksi 4 ympyrĂ€ funktio ARGUMENTIT 100 ”black” PALUUARVO ympyrĂ€ : Luku VĂ€ri -> Kuva
  • 5. Funktion sisĂ€iset muuttujat ovat nimeltÀÀn parametreja 5 ARGUMENTIT 100 PALUUARVO ”black” r vĂ€ri MUUTTUJAT (PARAMETRIT) (𝑐𝑖𝑟𝑐𝑙𝑒 𝑟 "solid" đ‘ŁĂ€đ‘Ÿđ‘–)
  • 6. Funktion mÀÀrittely 6 (define (ympyrĂ€ r vĂ€ri) (circle r ”solid” vĂ€ri))
  • 8. Funktion suunnitteluportaat 0) SelvitĂ€ itsellesi mitĂ€ funktiosi tekee: kirjoita tarkoitus kommenttiriville. 1) Keksi funktiollesi kuvaava nimi, listaa millaista muuttuvaa tietoa se kĂ€sittelee ja millaista tietoa se tuottaa: kirjoita esittely kommenttiriville. 2) Kirjoita funktiollesi runko (stub): keksi muuttujille (parametreille) kuvaavat nimet ja aseta paluuarvoksi ”jotain”. 3) Kirjoita funktion kĂ€ytölle esimerkit/testit (check- expect), kĂ€yttĂ€mĂ€llĂ€ konkreettisia arvoja. Testaa. 4) Kirjoita funktion toteutus. Testaa.
  • 9. Funktion suunnittelu Funktion koodaaminen suoraan, ilman suunnittelua on vaikeaa. Siksi seuraamme funktion suunnitteluportaat – ohjetta ja jaamme suunnittelun pieniin vaiheisiin, jotka ovat aloittelijallekin helppoja. 0. tarkoitus: kirjoita lyhyt kuvaus siitĂ€ mitĂ€ funktiosi tekee (vaihtoehtoisesti selitĂ€ tĂ€mĂ€ kaverillesi sanallisesti.) PÀÀasia, ettĂ€ ymmĂ€rrĂ€t mitĂ€ olet tekemĂ€ssĂ€. 1. esittely: keksi funktiolle nimi, listaa tarvittavien muuttujien tietotyypit ja pÀÀtĂ€ mitĂ€ tietotyyppiĂ€ funktiosi palauttaa 2. runko (stub): keksi muuttujille nimet, ja kirjoita ”tyhmĂ€ funktio” eli stub, joka ei vielĂ€ tee mitÀÀn jĂ€rkevÀÀ mutta joka ottaa vastaan argumentteja ja palauttaa oikeaa tyyppiĂ€ olevan ”tyhmĂ€n” vastauksen esim. 0 (luku) tai empty-image (kuva). 3. esimerkit: kirjoita esimerkkejĂ€ miten funktiotasi voisi kutsua, ja mitĂ€ se tulee palauttamaan (check-expect). Testaa painamalla ”run” -> testien pitÀÀkin epĂ€onnistua, koska kĂ€ytössĂ€ on tyhmĂ€ ”stub”. 4. koodi: kirjoita nyt funktiosi. Jatka stub:in koodi loppuu kĂ€yttĂ€mĂ€llĂ€ esimerkkejĂ€ apunasi. Usein esimerkin koodin voi kopioida suoraan funktion toteutukseksi sijoittamalla muuttujien nimet oikeille kohdille. Testaa funktiosi painamalla ”run” -> testien pitĂ€isi onnistua, jos funktio on koodattu oikein. 9
  • 10. Esimerkki: ympyrĂ€-funktio 1) PÀÀtetÀÀn funktion nimi (ympyrĂ€), sen muuttujien tyypit (Luku, VĂ€ri) ja paluuarvon tyyppi (Kuva) ;; ympyrĂ€ : Luku VĂ€ri -> Kuva 2) Annetaan funktion muuttujille nimet (r, vĂ€ri): (define (ympyrĂ€ r vĂ€ri) empty-image) ; stub 3) SelvitetÀÀn esimerkkien avulla miten se toimii: (check-expect (ympyrĂ€ 50 ”black”) (circle 50 ”solid” ”black”)), (check-expect (ympyrĂ€ 60 ”red”) (circle 60 ”solid” ”red”)) 4) Kirjoitetaan funktio loppuun (jatketaan stub loppuun), korvaa vakiot muuttujanimillĂ€ (r ja vĂ€ri): (define (ympyrĂ€ r vĂ€ri) (circle r ”solid” vĂ€ri)) 10
  • 11. YmpyrĂ€-funktion kĂ€yttĂ€minen 11 (overlay (ympyrĂ€ 20 "black") (ympyrĂ€ 40 "white") (ympyrĂ€ 60 "black") (ympyrĂ€ 80 "white") (ympyrĂ€ 100 "black"))
  • 12. Konkretiasta abstraktioon Konkretia (esimerkit/testit): (check-expect (neliö 4) (* 4 4)) (check-expect (neliö -3) (* -3 -3)) Abstraktio (funktio): (define (neliö x) (* x x)) KOODIAAPINEN MOOC - SYKSY 2015 4 -3 16 9 x x2
  • 13. Funktio, joka palauttaa luvun 13 ARGUMENTIT 400 PALUUARVO 25 10 000 x y MUUTTUJAT (PARAMETRIT) đ‘„ ∙ 𝑩
  • 14. Esimerkki: pinta-ala-funktio 1) PÀÀtetÀÀn funktion nimi : sen parametrien tyypit -> paluuarvon tyyppi ;; pinta-ala : Luku Luku -> Luku 2) Annetaan funktiolle ja sen parametreille nimet (stub): (define (pinta-ala x y) 0) ; stub 3) SelvitetÀÀn esimerkkien avulla miten se toimii: (check-expect (pinta-ala 400 25) (* 400 25)) (check-expect (pinta-ala 100 50) (* 100 50)) 4) Kirjoitetaan funktio loppuun (jatketaan stubia): (define (pinta-ala x y) (* x y)) 14
  • 16. Esimerkki: ympyrĂ€lieriön- tilavuus-funktio 1) PÀÀtetÀÀn funktion nimi : sen parametrien tyypit -> paluuarvon tyyppi ;; ympyrĂ€lieriön-tilavuus : Luku Luku -> Luku 2) Annetaan funktiolle ja sen parametreille nimet (stub): (define (ympyrĂ€lieriön-tilavuus h r) 0) 3) SelvitetÀÀn esimerkkien avulla miten se toimii: (check-within (ympyrĂ€lieriön-tilavuus 400 25) (* 400 (* pi (sqr 25))) 0.001) (check-within (ympyrĂ€lieriön-tilavuus 100 50) (* 100 (* pi (sqr 50))) 0.001) 4) Kirjoitetaan funktio loppuun (jatketaan stubia): (define (ympyrĂ€lieriön-tilavuus h r) (* h (* pi (sqr r)))) 16 Huom! Check-expect ei toimi tĂ€ssĂ€, koska π:n arvo on likiarvo. Likiarvoja sisĂ€ltĂ€viĂ€ tuloksia pitÀÀ testata kĂ€yttĂ€mĂ€llĂ€ check- within – funktiota, jolle annetaan tarkkuus kolmantena argumenttina.
  • 17. Stub:in tyhmĂ€t paluuarvot Tietotyyppi TyhmĂ€ paluuarvo Luku 0 Merkkijono ”” Kuva empty-image KOODIAAPINEN MOOC - SYKSY 2015 Jotta check-expect – lauseet voidaan ajaa, funktiosta on oltava olemassa ”tyhmĂ€ mÀÀrittely” (stub). Koska funktion on aina palautettava jotain myös stub:in on palautettava ”jotain tyhmĂ€Ă€â€ mutta oikean tyyppistĂ€. Voit kĂ€yttÀÀ esim. NĂ€itĂ€ arvoja stub:in paluuarvoina:
  • 18. Sanasto Koodarin kĂ€sikirjasta löytyy sanasto KĂ€ytĂ€ sitĂ€ hyvĂ€ksesi kun törmÀÀt sinulle uuteen termiin. Toisen viikon uudet termit: ARVOJOUKKO FUNKTIO FUNKTION SUUNNITTELUPORTAAT KOMMENTTI PARAMETRI MÄÄRITTELYJOUKKO KOODIAAPINEN MOOC - SYKSY 2015
  • 19. VinkkejĂ€ viikon palautustehtĂ€vÀÀn TĂ€llĂ€ viikolla prosessi on tĂ€rkeĂ€mpi kuin lopputulos. Tarkoitus on suunnitella tyhjĂ€stĂ€ yksi funktio, joka tekee jotain hyödyllistĂ€. TĂ€mĂ€ on ensimmĂ€inen yksinkertainen ohjelmasi, jonka suunnittelet, toteutat ja testaat. TĂ€ssĂ€ kĂ€ydÀÀn siis lĂ€pi minimittakaavassa oikean ohjelmistoprojektin vaiheet. Huomaa, ettĂ€ suunnittelu on isompi (ja vaikeampi prosessi), kuin toteutus ja testaus. KOODIAAPINEN MOOC - SYKSY 2015 Suunnittelu: 0) Tarkoitus 1) Esittely 2) Runko (stub) 3) Esimerkit/testit Toteutus: 4) Funktion toteutus ja testaus
  • 20. VinkkejĂ€ viikon palautustehtĂ€vÀÀn Funktio on hyvĂ€ funktio, kun se tekee vain yhden asian. Jos tavoittelet monimutkaista funktiota, joka tekee kaksi asiaa, sinun pitĂ€isi tehdĂ€ kaksi erillistĂ€ funktiota. Jos nĂ€yttÀÀ siltĂ€, ettĂ€ viikkotehtĂ€vĂ€si paisuu yli kolmen funktion, suosittelen tehtĂ€vĂ€n rajaamista! Toki jos intoa riittÀÀ, pidemmĂ€llekin saa mennĂ€. TĂ€rkeintĂ€ on, ettĂ€ osaat tunnistaa muuttuvia asioita ja vakioita sekĂ€ osaat suunnitella esimerkit/testit funktiolle. PidĂ€ mielessĂ€ sama periaate kuin ensimmĂ€isellĂ€ viikolla: tee paloissa. Pieni, yksinkertainen apufunktio on helppo suunnitella, koodata ja testata. Iso monimutkainen funktio on sitten helppo koostaa valmiista apufunktioista. KOODIAAPINEN MOOC - SYKSY 2015 funktio apufunktio1 apufunktio2
  • 21. Racket DEBUGGAUS Palaa tĂ€hĂ€n kohtaan, kun törmÀÀt virheilmoituksiin!
  • 22. MistĂ€ virheilmoitukset voivat johtuvat? KOODIAAPINEN MOOC - SYKSY 2015 Virheilmoitus SyitĂ€ define: expected at least one variable after the function name, but found none Esimerkki define: expected only one expression after the variable name neliö, but found 1 extra part Esimerkki a: this variable is not defined Esimerkki(1) Esimerkki(2) check-expect: expects 2 arguments, but found only 1 Esimerkki define: expected only one expression for the function body, but found 2 extra parts Esimerkki(1) Esimerkki(2) Esimerkki(3) 
 this function is not defined Esimerkki
  • 23. Debuggaus: define: expected at least one variable after the function name
 KOODIAAPINEN MOOC - SYKSY 2015 Racket BSL – kielessĂ€ ei sallita funktioita, joilla ei ole yhtÀÀn parametria (muuttujaa). LisÀÀ funktiollesi vĂ€hintÀÀn yksi parametri: (define (neliö a) 0) ja paina ”run”. Huom! TĂ€mĂ€ on ”stub” (ei tee mitÀÀn Ă€lykĂ€stĂ€).
  • 24. Debuggaus: define: expected only one expression after the variable name 
 KOODIAAPINEN MOOC - SYKSY 2015 Koska define:llĂ€ voidaan mÀÀritellĂ€ myös muuttuja (vakio) tĂ€mĂ€ tulkitaan vÀÀrĂ€nlaiseksi muuttujan arvon asettamiseksi (neliö sanan jĂ€lkeen on kaksi lauseketta a ja 0, kun pitĂ€isi olla vain yksi). LisÀÀ sulut funktion nimen ja parametrin ympĂ€rille: (define (neliö a) 0) ja paina ”run”. Huom! TĂ€mĂ€ on ”stub” (ei tee mitÀÀn Ă€lykĂ€stĂ€).
  • 25. Debuggaus: a: this variable is not defined (1) KOODIAAPINEN MOOC - SYKSY 2015 Parametriin (muuttujaan) a voidaan viitata vain funktion sisĂ€llĂ€. TĂ€ssĂ€ siihen viitataan sen ulkopuolella, jonne se ei ”nĂ€y”. Check-expect lauseissa pitÀÀ kĂ€yttÀÀ valittuja esimerkkiarvoja. LisÀÀ a:n tilalle tĂ€ssĂ€ valittu esimerkkiluku 45: (check-expect (neliö 45) (* 45 45)) ja paina ”run”.
  • 26. Debuggaus: a: this variable is not defined (2) KOODIAAPINEN MOOC - SYKSY 2015 Parametriin (muuttujaan) a voidaan viitata vain funktion sisĂ€llĂ€. TĂ€ssĂ€ siihen viitataan sen ulkopuolella, jonne se ei ”nĂ€y”. Check-expect lauseissa pitÀÀ kĂ€yttÀÀ valittuja esimerkkiarvoja. LisÀÀ a:n tilalle tĂ€ssĂ€ valittu esimerkkiluku 45: (check-expect (neliö 45) (* 45 45)) ja paina ”run”.
  • 27. Debuggaus: a: this variable is not defined (2) KOODIAAPINEN MOOC - SYKSY 2015 Parametriin (muuttujaan) a voidaan viitata vain funktion sisĂ€llĂ€. TĂ€ssĂ€ siihen viitataan sen ulkopuolella, jonne se ei ”nĂ€y”. Check-expect lauseissa pitÀÀ kĂ€yttÀÀ valittuja esimerkkiarvoja. LisÀÀ a:n tilalle tĂ€ssĂ€ valittu esimerkkiluku 45: (check-expect (neliö 45) (* 45 45)) ja paina ”run”.
  • 28. Debuggaus: check-expect: expects 2 arguments, but found only 1 KOODIAAPINEN MOOC - SYKSY 2015 Check-expect – funktio ottaa kaksi argumenttia. EnsimmĂ€inen kutsuu testattavaa funktiota (neliö), ja toinen tuottaa esimerkkiarvon, johon uuden funktion paluuarvoa verrataan. TĂ€ssĂ€ jĂ€lkimmĂ€inen ”odotusarvo” on unohtunut pois. LisÀÀ ”odotusarvo”: (check-expect (neliö 45) (* 45 45)) ja paina ”run”.
  • 29. Debuggaus: define: expected only one expression for the function body, but found 2
(1) KOODIAAPINEN MOOC - SYKSY 2015 Funktion pitÀÀ palauttaa aina yksi lauseke. TĂ€llĂ€ yhden lausekkeen sijaan tulkitaan olevan kolme a, * ja a. Racket – lauseke muodostettiin sulkumerkkien avulla ja funktion nimi kirjoitetaan heti ”sulkuauki”- merkin jĂ€lkeen. LisÀÀ sulut ja siirrĂ€ funktion nimi oikealle paikalle: (define (neliö a) (* a a)) a paina ”run”.
  • 30. Debuggaus: define: expected only one expression for the function body, but found 2
(2) KOODIAAPINEN MOOC - SYKSY 2015 Funktion pitÀÀ palauttaa aina yksi lauseke. TĂ€ssĂ€ funktion sisĂ€llĂ€ on kaksi erillistĂ€ Racket – lauseketta: stub-koodi (0) sekĂ€ lopullinen funktion toteutus (* a a). Poista stub-koodi: (define (neliö a) (* a a)) a paina ”run”.
  • 31. Debuggaus: define: expected only one expression for the function body, but found 2
(3) KOODIAAPINEN MOOC - SYKSY 2015 Funktion pitÀÀ palauttaa aina yksi lauseke. TĂ€ssĂ€ funktion sisĂ€llĂ€ on kaksi erillistĂ€ Racket – lauseketta. YhdistĂ€ erilliset lausekkeet (tai poista turha lauseke): (define (neliö a) (number->string(* a a))) a paina ”run”.
  • 32. Debuggaus: 
 this function is not defined KOODIAAPINEN MOOC - SYKSY 2015 Check-expect – lauseke testaa neliö-funktiota mutta tĂ€ssĂ€ sitĂ€ ei ole mÀÀritetty. LisÀÀ neliö-funktion mÀÀrittely (vĂ€hintÀÀn ”tyhmĂ€â€ stub): (define (neliö a) 0) a paina ”run”.