racket mooc - jakso 5

10
Racket 5. JAKSO

Upload: tiina-partanen

Post on 15-Apr-2017

1.290 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Racket MOOC - jakso 5

Racket 5. JAKSO

Page 2: Racket MOOC - jakso 5

2

Sisällysluettelo 6A. LISTA

1. Lista: list, cons, first, rest, append, length, empty?

2. Lista: member?, remove, remove-all, list-ref

3. range

6B. LISTA JA REKURSIO

4. Listan ”syöminen” rekursiivisesti

5. Listan luominen rekursiivisesti

Page 3: Racket MOOC - jakso 5

3

Listalist, cons, first, rest

Lista on tietorakenne, johon voi tallentaa mitä tahansa tietoa. Tyhjään listaan viitataan Racket-kielessä sanalla empty tai symbolilla ’().

Listan luominen:

(list 1 2 3 4 5 6)

Uuden alkion lisääminen valmiiseen listaan (lisätään aina alkuun):

(cons 7 (list 1 2 3 4 5 6)) -> (list 7 1 2 3 4 5 6)

Listan ensimmäisen alkion palauttaminen (myös second, third):

(first (list 7 1 2 3 4 5 6)) -> 7

Listan loppuosan palauttaminen (esimmäinen alkio poistetaan).

(rest (list 7 1 2 3 4 5 6)) -> (list 1 2 3 4 5 6)

Page 4: Racket MOOC - jakso 5

4

Listaappend, length, empty?

Listojen yhdistäminen

(append (list 1 2 3)(list 4 5 6))-> (list 1 2 3 4 5 6)

Listan pituuden kysyminen

(length (list 1 2 3 4)) -> 4

Tyhjän listan tunnistaminen

(empty? ’()) -> #true

(empty? (list 1 2)) -> #false

Listassa voi olla mitä tahansa (merkkijonoja, kuvia, listoja, totuusarvoja...):

(list 3 ”Tiina” (list 1 2 3) #t)

Page 5: Racket MOOC - jakso 5

5

Listamember?, remove, remove-all, list-ref

Voit tutkia onko alkio listan jäsen

(member? 3 (list 4 5 6))-> #false

Voit poistaa alkion listasta

(remove 4 (list 1 2 3 4)) -> (list 1 2 3)

Voit poistaa kaikki tietyt alkiot

(remove-all 2 (list 1 2 3 2 4) -> (list 1 3 4)

Ottaa listasta tietyssä kohtaa sijaitsevan alkion (ensimmäinen alkio 0)

(list-ref (list 10 20 30) 1) -> 20

Page 6: Racket MOOC - jakso 5

6

Listan ”syöminen” rekursiivisesti

Silmukkarakennetta voidaan käyttään esim. lista- tai puutyyppisen tietorakenteen läpi käymiseen. Silloin ei tarvita laskuria, koska silmukan toiminta voidaan lopettaa kun tietorakenne on käyty loppuu (esim. saavutettu listan pää).

Esim. Luetellaan ruokalista

(require teachpacks/display-read)

(define (syö-listaa lista)

(if (empty? lista)

(display-info-timer "Lista loppui” 50)

(begin (display-info-timer (first lista) 50)

(syö-listaa (rest lista)))))

(syö-listaa (list "cokis" "ranskalaiset" "jäätelö"))

Page 7: Racket MOOC - jakso 5

7

Listan luominen rekursiivisesti(listaan kerätään kuvia)

Lista voi olla myös akkumulaattorin paikalla, eli voit kerätä tuloksia listaan. (require 2htdp/image)

(define (tähtiä i lista)

(if (<= i 0)

lista

(tähtiä (sub1 i)(cons (star (* i 10) "solid" "aqua") lista))))

(tähtiä 8 empty)uusi tähti

lisää uuden alkion listaan

Page 8: Racket MOOC - jakso 5

8

Kysytään käyttäjältä lukupareja(kerätään listaksi)

(define (kysy-mitat n lista) (let [(x (display-read-number "Anna x")) (y (display-read-number "Anna y"))] (cond [(not (or (number? x) (number? y)))

(kysy-mitat n lista)] [(<= n 1)

(cons (list x y) lista)]

[else

(kysy-mitat (sub1 n) (cons (list x y) lista))])))

(kysy-mitat 5 empty)

akkumulaattori

lopetusehto

Page 9: Racket MOOC - jakso 5

KOODIAAPINEN MOOC - SYKSY 2015

Listoja hyödyntävät interaktiiviset ohjelmat

Tunnistuspeli ja valintapeli Kysymykset ja vastaukset kerätään listaksi, jota käydään läpi rekursiivisen silmukan avulla. (define KYSYMYKSET (list (list OMENA-KYSYMYS "omena")

(list PAPRIKA-KYSYMYS "paprika")))

;; pelaa : Lista Luku -> Luku

(define (pelaa peli pisteet)

(if (empty? peli)

(display-value "Sait pisteitä:" pisteet)

(if (oikein? (first peli) (display-read (first (first peli))))

(begin (display-info "Oikein")

(pelaa (rest peli) (add1 pisteet)))

(begin (display-info "Väärin")

(pelaa (rest peli) pisteet)))))

;; käynnistää pelin (alussa pisteitä 0)

(pelaa KYSYMYKSET 0)

Page 10: Racket MOOC - jakso 5

KOODIAAPINEN MOOC - SYKSY 2015

Vinkkejä palautettavaan jaksotehtävään

Voit tehdä oman versiosi tunnistus- tai valintapelistä. Voit käyttää malliratkaisuja pohjana omalle pelillesi. Voit myös halutessasi soveltaa listatietojasi vasta jaksolla 6. Turtle grafiikan parissa (jaksot 5. ja 6. käsittelevät molemmat listoja).

Jotta muutkin kurssilaiset pääsevät pelaamaan peliäsi, jaa se WeSchemen kautta!