15
Racket – perusteet 4. EHTO- JA VALINTALAUSEET

Racket perusteet 4. Ehto- ja valintalauseet

Embed Size (px)

Citation preview

Page 1: Racket perusteet 4. Ehto- ja valintalauseet

Racket – perusteet 4. EHTO- JA VALINTALAUSEET

Page 2: 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

Page 3: Racket perusteet 4. Ehto- ja valintalauseet

3

Totuusarvot (true/false)- tosi

#true, true #t, #T

true false

- epätosi#false, false #f, #F

Page 4: Racket perusteet 4. Ehto- ja valintalauseet

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

Page 5: Racket perusteet 4. Ehto- ja valintalauseet

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

Page 6: Racket perusteet 4. Ehto- ja valintalauseet

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

???

Page 7: Racket perusteet 4. Ehto- ja valintalauseet

7

Ehtolause (if)

(if (< a 100) ”a on pienempi kuin 100” ”a on yhtäsuuri tai suurempi kuin 100”)

Page 8: Racket perusteet 4. Ehto- ja valintalauseet

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

Page 9: Racket perusteet 4. Ehto- ja valintalauseet

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”

Page 10: Racket perusteet 4. Ehto- ja valintalauseet

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”))

Page 11: Racket perusteet 4. Ehto- ja valintalauseet

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)

Page 12: Racket perusteet 4. Ehto- ja valintalauseet

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”))

Page 13: Racket perusteet 4. Ehto- ja valintalauseet

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”))

Page 14: Racket perusteet 4. Ehto- ja valintalauseet

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

Page 15: Racket perusteet 4. Ehto- ja valintalauseet

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]))