Skip to content

Instantly share code, notes, and snippets.

@opqdonut
Created November 8, 2016 14:44
Show Gist options
  • Select an option

  • Save opqdonut/bf5d6e69744824ef873d63ed4b5e417b to your computer and use it in GitHub Desktop.

Select an option

Save opqdonut/bf5d6e69744824ef873d63ed4b5e417b to your computer and use it in GitHub Desktop.
clojure-harjoituksia

syntaksi

  • laske (3+4/5)*6
  • kutsu funktiota get argumenteilla “ciao” ja 1
  • määrittele vektori jossa on elementit 1, “moi” ja true
  • määrittele vektori joka sisältää keywordit :diff ja :merge
  • määrittele map jossa avain 1 liittyy arvoon “hei” ja avain :key arvoon [13 7]
  • määrittele muuttuja my-map joka sisältää mapin {1 2}. Lisää my-mappiin assoc-funktiolla uusi avain ja arvo. Mitä assoc-funktio palauttaa? Mikä on my-map muuttujan arvo tämän jälkeen?
  • käytä funktiota get hakemaan vektorin toinen alkio
  • käytä funktiota get hakemaan mapista avain
  • hae mapista avain käyttämällä itse mappia funktiona
  • hae mapista avain käyttämällä keywordiä funktiona
  • Käytä funktiota get-in noutamaan arvo :aarre arvosta {:kuvaus “luolasto” :risteys [{:sisalto :hirvio} nil {:sisalto [:hely :aarre]}]}
  • tee funktio hello joka toimii näin: (hello) ==> “hello!”
  • tee funktio tupla joka toimii näin (tupla 5) ==> 10, (tupla 1) ==> 2

kontrollirakenteet

  • tee funktio small? joka palauttaa true luvuille alle 100
  • tee funktio message! jolla on kolme eri tapausta: (message! :boink) ==> “Boink!” (message! :pig) ==> “oink” (message! :ping) ==> “pong”
  • toteuta funktio message! uudelleen käyttäen if-rakennetta
  • toteuta funktio message! uudelleen käyttäen cond-rakennetta
  • toteuta funktio message! uudelleen käyttäen case-rakennetta

funktionaalista

  • kasvata vektorin [4 7 9 10] kaikkia lukuja yhdellä. Käytä map-funktiota. Vihje: funktio inc kasvattaa lukua yhdellä!
  • tee sama kuin äsken, mutta jätä jäljelle vain parilliset luvut. Käytä funktioita filter ja even?

  • käytä funktiota update-in kasvattamaan numeroa 3 yhdellä alla olevassa rakenteessa: {:shops [:shop-1] :customers [{:id “Pekka” :account {:saldo 3}}]}

  • haastava: käytä reduce-funktiota yhdistämään vektori mappeja yhdeksi: (combine [{:a 1 :b 2} {:c 3} {:d 4 :e 5}]) ==> {:a 1 :b 2 :c 3 :d 4 :e 5}

rinnakkaisuutta ja transaktioita

  • määrittele atomi my-atom joka sisältää arvon 4
  • hae my-atomin nykyinen arvo operaattorilla @
  • päivitä my-atomin sisältämä arvo arvoon 5 käyttämällä funktiota reset!
  • hae my-atomin nykyinen arvo funktiolla deref
  • päivitä my-atomin sisältämä arvo arvoon 6 käyttämällä funktiota swap!
  • määrittele ref my-ref joka sisältää arvon 4
  • lue my-refin arvo
  • päivitä my-refin arvo arvoon 5 käyttämällä funktiota ref-set Huom: joudut käyttämään myös makroa dosync
  • päivitä my-refin arvo arvoon 6 käyttämällä funktiota alter

4clojure.com

vähän hankalampia

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment