On this page:
3.2.1 Listan "syöntiä" ja luontia rekursiivisesti
3.2.2 Kuvatehtäviä listoilla
3.2.3 Laskutoimituksia listoilla ja Higher Order - funktioilla
6.4

3.2 Listat

Listat, kesto 6:19

Kun käsitellään isoa määrä tietoa, on kätevää tallentaa se tietorakenteeseen, jonka koko voi kasvaa ja pienentyä tarvittaessa. Lista on juuri tällainen tietorakenne. Listaan voi lisätä alkioita, siitä voi poistaa alkioita, listoja voi yhdistellä jne.

Listan käsittely rekursiivisesti (osa 1), kesto 5:53

Listamuotoista tietoa on myös helppo käsitellä rekursiivisilla funktioilla tai Higher Order - funktioilla. Tutustu niihin Koodarin käsikirjan avulla.

Listan käsittely rekursiivisesti (osa 2), kesto 7:38

3.2.1 Listan "syöntiä" ja luontia rekursiivisesti

Harjoittele listojen ja rekursion käyttöä seuraavien tehtävien avulla.

Listan "syöntiä" ja luontia rekursiivisesti

Tee funktio, joka laskee listassa olevista luvuista keskiarvon.

Tee funktio, joka laskee listassa oleville hinnoille alennetun/korotetun hinnan, kun funktiolle annetaan haluttu muutosprosentti (esim. -10 tarkoittaa -10%, 20 tarkoittaa +20%).

Tee funktio, joka ottaa sisäänsä oppilaiden nimet listana, ja palauttaa listan jossa on arvottu uudet oppilasparit. Esim. alkuperäinen lista: (list "Jenni" "Ulla" "Pasi" "Panu" ) Uusi parit-lista: (list (list "Jenni" "Pasi") (list "Panu" "Ulla"))

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

+

   

/

   

list-ref

   

length

   

string=?

   

random

remove

   

cons

   

first

   

rest

   

empty?

   

let*

Opettajan diat.

3.2.2 Kuvatehtäviä listoilla

Listaa voi käydä läpi myös niin, että se ei tyhjene vaan käytetty alkio siirretään listan loppuun, jolloin se tulee käyttöön jälleen omalla vuorollaan. Käytä tätä ideaa apunasi seuraavassa tehtävässä.

Kuvatehtäviä listoilla

Tee funktio, joka tuottaa oheisen kuvion mukaisen "Death Star" -tähden. Vinkki: Värit kannattaa tallentaan listaan, joka annetaan parametrina rekursiiviselle funktiolle.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

overlay

   

star

   

random

   

first

   

rest

append

   

list

   

+

   

-

   

if

<

   

>

   

<=

   

>=

   

=

3.2.3 Laskutoimituksia listoilla ja Higher Order - funktioilla

Harjoittele listojen kanssa laskemista seuraavien tehtävien avulla.

Higher Order -funktiot (map, apply), kesto 9:30

Laskutoimitukset listoilla

Keskiarvo, mediaani ja moodi

Tee funktiot, jotka laskevat listassa olevista luvuista keskiarvon, mediaanin sekä moodin.

Eratostheneen seula alkulukujen etsimiseen

Algoritmi: Muodostetaan lista (2, 3, ... 100). Poistetaan listasta kaikki luvut, jotka ovat jaollisia kymmentä pienemmillä alkuluvuilla: 2, 3, 5 ja 7. Jäljelle jääneet luvut ovat jaollisia vain itsellään ja ykkösellä eli ne ovat alkulukuja. Sataan asti tarkistamiseen riittää tutkia jaollisuus kymmentä pienemmillä luvuilla (10*10=100). Eratosthenen seula sataa pienemmillä alkuluvuilla antaisi siis alkuluvut, jotka ovat pienempiä kuin 10000 (100*100) jne.

Tässä harjoituksessa saatat tarvita seuraavia Racket-kielen funktioita:

+

   

-

   

*

   

/

   

map

   

foldl

   

foldr

   

range

add1

   

sub1

   

max

   

filter

   

remove

   

cons

   

floor

   

first

rest

   

empty?

   

<

   

>

   

<=

   

>=

   

=

   

lambda