Racket perusteet 4. Ehto- ja valintalauseet
-
Upload
tiina-partanen -
Category
Education
-
view
2.367 -
download
1
Transcript of Racket perusteet 4. Ehto- ja valintalauseet
Racket – perusteet 4. EHTO- JA VALINTALAUSEET
2
Sisällysluettelo: 4A. EHTOLAUSE
1. Totuusarvot
2. Vertailuoperaattorit
3. Predikaatit
4. Ehtolause
4B. VALINTALAUSE
5. Boolean operaattorit
6. Valintalause
3
Totuusarvot (true/false)- tosi
#true, true #t, #T
true false
- epätosi#false, false #f, #F
4
Vertailuoperaattorit Vertailuoperaattorit palauttavat totuusarvon
Yleensä vain samantyyppisiä arvoja kannattaa verrata keskenään, siksi nämä funktiot toimivat vain, jos argumentit ovat oikean tyyppisiä:
◦ Vertailuoperaattorit luvuille: <, >, <=, >=, =◦ Merkkijonoille: string=?◦ Kuville: image=?
esim. (< 4 5) #true(= 4 -4) #false(string=? ”kissa1” ”kissa1”) #true
5
Muunnokset ja vertailu
string->number
6”6”=
6
#T
(= (string->number ”6”) 6)
Luvut ja merkkijonot voidaan muuntaan toisen tyyppisiksi, jotta niitä voidaan vertailla:
number->stringstring->number
6
PredikaatitFunktioita, jotka palauttavat totuusarvon kutsutaan predikaateiksi.
Racket-kielessä niiden nimessä on usein kysymysmerkki
esim. (number? 4) #true(string? 4) #false(even? 2) #true
(zero? 3) #false (positive? -3) #false
???
7
Ehtolause (if)
(if (< a 100) ”a on pienempi kuin 100” ”a on yhtäsuuri tai suurempi kuin 100”)
8
Ehtolause funktion sisällä
Ehtolause sijaitsee normaalisti funktion sisällä, jolloin tutkitaan saatuja parametrien arvoja:
esim.
(define (termostaatti lämpötila)
(if (< lämpötila 22)
”käynnistä lämmitin”
”sammuta lämmitin”)))
22°C
9
Sisäkkäiset ehtolauseetEhtolauseen sisällä voi olla toinen ehtolause:
esim.
(define (termostaatti lämpötila)
(if (number? lämpötila)
(if (< lämpötila 22)
”käynnistä lämmitin”
”sammuta lämmitin”)
”lämpötilasensori on viallinen”))
sisempi ehtolause onulomman ehtolauseen ”tosihaara”
10
Robottiautofunktio ehtolauseella
;; robottiauto : Väri -> Merkkijono
(define (robottiauto valo)
(if (string=? valo ”green”)
”aja” ”pysähdy”)
(check-expect (robottiauto ”red”)
”pysähdy”))
(check-expect (robottiauto ”green”)
”pysähdy”))
11
Boolean operaattoreilla voi yhdistellä ehtoja
◦ Kaikkien ehtojen tulee olla totta: and◦ Vähintään yhden ehdon tulee olla totta: or◦ Kääntää ehdon vastakkaiseksi: not
Boolean operaattorit (and, or, not)
12
and kaikkien ehtojen tulee toteutua
(and #true #true) #true (and #true #false) #false (and #false #true) #false
Esim.
Jos funktiota kutsuu väärän tyyppisellä argumentilla, tulee virhe. Siksi on hyvä tutkia ENNEN funktion kutsumista, että argumentit ovat ok.
(define (pinta-ala a b)
(if (and (number? a)(number? b))
(* a b)
”Virhe: anna lukuja”))
13
orvähintään yhden ehdon on toteuduttava
(or #true #false) #true (or #false #true) #true (or #false #false) #false
Esim.
Joskus ”oikeita” vastauksia on useampi, silloin ehdot yhdisteään käyttämällä or:ia.
(define (pohjoismaa? maa) (or (string=? maa ”Suomi”) (string=? maa ”Norja”) (string=? maa ”Ruotsi”) (string=? maa ”Tanska”) (string=? maa ”Islanti”))
14
notkääntää ehdon vastakkaiseksi
(not #true) #false(not #false) #true
Esim. Joskus tarvitaan ehdon vastakohtaa
(define (nollastapoikkeva? luku) (not (zero? luku))
A B (and A B) (or A B) (not A)#T #T #T #T #F
#T #F #F #T #F
#F #F #F #F #T
15
valintalause (cond) Jos ehtolauseita tulee kovin monta sisäkkäin, niiden lukeminen ja ohjelmointi on sekavaa. Valintalauseeseen voi laittaa niin monta ehtoa kuin haluaa ja viimeinen else-haara suoritetaan jos mikään muu ehto ei toteutunut.
Esim.
Koska bussilipun hinta (€) määräytyy iän mukaan ehtoja on olta monta.
(define (bussilipun-hinta ikä) (cond [(>= ikä 18) 3]
[(< 12 ikä 18) 2] [(<= 7 ikä 12) 1]
[else 0]))