Viikko 1 - Johdatus ja syntaksi

Johdanto

Esimerkkivastaukset

Tämän viikon harjoituksissa on tarkoitus oppia Haskellin syntaksi päällisin puolin. Tehtävien tekemiseksi tarvittavat tiedot löytyvät seuraavista lähteistä:

Lue ensin yllämainitut lähteet kevyesti läpi ja pähkäile tehtäviä palaten materiaaliin, jos tiedot loppuvat. Kun vääjäämättä jokin asia jää täysin mysteeriksi, kysy. Kurssin toimintalogiikka pohjautuu siihen, että opiskelija tekee kysymyksiä ja luennoija vastaa.

Kysymykset tehtävistä, Haskell ohjelmoinnista ja elämästä yleensä lähetetään tiistai-aamuksi luennoijalle (ville.tirronen@jyu.fi), joka pyrkii vastaamaan niihin tiistain ohjauksissa. Kysymykset käsitellään ohjauksissa anonyymisti, joten ei tarvitse pelätä liian tyhmiä kysymyksiä. Jos kysymyksiä ei tule, luennoija ymmärtää sen niin, että kaikki on selvää ja tekee seuraavista harjoituksista vastaavasti haastavampia.

Tehtävien tekemistä varten joudut noutamaan Haskell-ympäristön. Voit joko asentaa sen suoraan omalle koneellesi, toimimalla sivun Haskell-platform ohjeiden mukaisesti, tai käyttää samaa VirtualBox ympäristöä, kuin mitä harjoituksissa käytetään. Tätä varten joudut lataamaan virtuaalikoneen ja virtuaalisen konekuvan, johon tarvittavat ohjelmat on asennettu.

Kaikki tehtävät tulee olla tehtynä ja palautettuna torstaina kello 12. Mutta ei hätää, opetushenkilökunta auttaa niin paljon kun tarvitaan.

Asteroids

Tutustu Asteroids-pelin esimerkkikoodiin. Testaa ohjelmaa ja selvitä itsellesi miten se toimii. Huomaa, että tarkoituksena ei ole oppia tekemään vastaavaa peliä itse, vaan oppia lukemaan Haskellia ja selvittää pintapuolisesti mitä rakenteita se sisältää.

Tehtävää ei ole tarkoitettu erityisen helpoksi vaan herättämään niin paljon kysymyksiä, että ohjauksissa riittää puhuttavaa.

Miten se toimii?

Tämän tehtävän tarkoitus on opettaa, hieman julmalla tavalla, lukemaan Haskellia. Tarkoitus olisi, että tehtyäsi tämän tehtävän osaat tulkita ohjelmaa tasolla “tuo tuossa on funktiokutsu, tuossa on ehtorakenne, tuolla määritellään tietotyyppi ja tuossa tapahtuu pattern matching”

  1. Millaisia rakenteita ohjelmassa on käytetty? Tee luettelo erilaisista ohjelmointikielen konstruktioista, funktioista ja symboleista, joita löydät ohjelmasta ja selvitä kurssimateriaalista niiden merkitys.
  2. Miten Haskell ohjelma näyttäisi ryhmittyvän? Selvitä esimerkiksi millaisia eri koodilohkoja ohjelmassa on, miten sulkuja käytetään ja millainen assosiatiivisuus eri operaattoreilla on.
  3. Selvitä, mitä, miten, ja millä parametreillä ohjelman funktioita kutsutaan. Älä unohda kirjastofunktioita!
  4. Valitse jokin määritelmä esimerkkikoodista, ja selvitä sanallisesti ja tarkkaan mitä siinä tapahtuu.

Eniten erilaisia rakenteita keksinyt ja niitä selittänyt ryhmä saa Haskell tarran.

Parempi Asteroids

  1. Peli on hieman puutteellinen. Muuta peliä siten, että “Game over!” tilasta voidaan aloittaa uusi peli painamalla jotain nappia. (Ts. Lisää uusi tapaus handleEvents funktioon.)
  2. Alkuperäisessä asteroidsissa kivet olivat hauskoja monikulmioita. Tee tämänkin pelin kivistä hauskoja monikulmioita.
  3. Alkuperäisessä Asteroidsissa oli hassu ufo, joka ammuskeli pelaajaa. Lisää pelimaailma-tietorakenteeseen määritelmä ufolle. Huomaa, että joudut muuttamaan funktioiden initialWorld, drawWorld, simulateWorld ja handleEvents parametrilistaa ja paluuarvoa vastaamaan tietorakenteesi muutosta
  4. Muuta drawWorld funktiota siten, että ufo piirtyy ruudulle.
  5. Muuta simulateWorld:ia siten, että ufo heiluu ruudulla

Reflektio

  1. Miten Haskell kieli vertautuu syntaksiltaan aiempiin tuntemiisi ohjelmointikieliin?
  2. Mikä tehtävissä oli vaikeaa?
  3. Mistä yllätyit?
Asteroids peli

Asteroids peli

blog comments powered by Disqus