Close menu
Close menu

Tunnistaudu

Kirjaudu

Etkö ole vielä jäsen?

Liity jäseneksi

1. Listat ja tilastomatematiikkaa

1. Listat ja Higher Order – funktiot

Tässä osiossa perehdymme ohjelmointiin listojen avulla. Lista on yksi esimerkki tietorakenteesta, joita ohjelmoinnissa käytetään monimutkaisemman tiedon tallentamiseen ja käsittelemiseen. Kun tieto on tallennettu listan muotoon, sitä on helpompi käsitellä, erityisesti samanlaisina toistuvat operaatiot on kätevää suorittaa listoille ns. Higher Order – funktioiden avulla.

Lista on tietorakenne

Listaan voi tallentaa millaista tietoa tahansa eivätkä listan alkioiden ei tarvitse olla keskenään saman tyyppisiä. Tietysti jos halutaan käsitellä listoja Higher Order – funktioiden avulla, listan alkíoiden tulee olla sellaista tyyppiä, että funktio voi niitä ylipäätään käsitellä.

Lista voidaan ajatella joukkona tietoalkioita mutta käytännössä listan alkioilla on aina myös järjestys. Tietokoneen sisällä listan alkiot on linkitetty toisiinsa niin, että edellinen alkio ohjaa seuraavaan alkioon. Listan viimeinen alkio osoittaa tyhjää listaa (empty tai ’()) ja siitä tiedetään lopettaa listan lukeminen. Tästä rakenteesta johtuen, uusia alkoita on helpoin lisätä listan alkuun ja listan pituus on joustava, listaan mahtuu aina lisää alkioita eikä se tule koskaan ”täyteen”.

Esimerkki 1. Tässä on lista, jonka ensimmäinen alkio on luku 24, toinen alkio merkkijono ”Heippa” ja viimeinen alkio totuusarvo #false. Racket-kielessä tyhjä lista merkitään ’().
lista_kuva1.PNG

Lista voi sisältää myös toisia listoja ja silloin rakenne muistuttaakin enemmän puuta.

Esimerkki 2. Tässä lista sisältää kaksi muuta listaa. Listan tiedot voidaan tulkita niin, että siinä kerrotaan että luokalla ”9A” on kaksi oppilasta ”Mikko” 15v ja ”Sanna” 16v.

lista_kuva2.PNG

Higher Order – funktiot

Olemme käyttäneet tähän asti ns. First Order – funktioita. Ne ovat ns. tavallisisa funktioita, jotka käsittelevät ”tavallista” tietoa, kuten lukuja, merkkijonoja, kuvia tai totuusarvoja. Higher Order – funktiot eroavat näistä siinä, että niitä kutsuttaessa niille annetaan argumenttina First Order – funktio sekä yksi tai useampi lista. Higher Order – funktio on siis funktio, joka saa argumentinaan toisen funktion. Higher Order funktiot osaavat siis käyttää annettua funktiota työkaluna listan alkioiden käsittelyyn eli ovat tehokkaita toistamaan samaa operaatiota listan alkioillle.

Tässä jaksossa opimme käyttämään Higher Order funktoita: apply, map, foldl, filter ja sort.

1.1. Listojen käsittely