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.
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
2
3.
Lista
list, 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)
3
4.
Lista
append, 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)
4
5.
Lista
member?, 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
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ö"))
6
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)
7
uusi tähti
lisää uuden alkion listaan
9.
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)
KOODIAAPINEN MOOC - SYKSY 2015
10.
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!
KOODIAAPINEN MOOC - SYKSY 2015
0 likes
Be the first to like this
Views
Total views
2,623
On SlideShare
0
From Embeds
0
Number of Embeds
2,175
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.