Programiranje u Haskellu

Opis predmeta

Ovo je uvodni tečaj programiranja u naprednome, čisto funkcijskome programskom jeziku Haskell. Funkcijski programski jezici omogućuju brz razvoj robusnih i konciznih programa. Njihove su ključne prednosti apstrakcija putem funkcije višega reda te napredan tipski sustav koji jamči sigurnost i ponovnu iskoristivost koda. Na predmetu se temeljito podučavaju osnove programiranja u Haskellu i osnovni koncepti funkcijskog programiranja. Tečaj kreće od jezičnih konstrukata i osnovnih tipova podataka, nastavlja s funkcijama višeg reda i funkcijskim obrascima te završava s ulazno-izlaznih podatkovnim tokovima i monadama. Praktično iskustvo studenti stječu rješavanjem brojnih problemskih zadataka u okviru predavanja i domaćih zadaća. Cilj predmeta nije samo učenje novog programskog jezika, već i upoznavanje s novom programskom paradigmom te radikalno drugačijim i matematički sofisticiranim pristupom programiranju.

Opće kompetencije

Studenti će se upoznati s osnovnim konceptima funkcijskog programiranja u Haskellu, upoznat će i steći razumijevanje osnove sintakse i semantike programskoga jezika Haskell, razvit će sposobost uočavanja i primjene funkcijskih idioma i funkcijskih oblikovnih obrazaca, bit će sposobni koristiti Haskell za rješavanje jednostavnijih praktičnih problema, pronaći i koristiti gotove programske biblioteke za rješavanje složenijih problema, znat će usporediti dva programa te utvrditi koji je program bolji prema zadanome kriteriju i upoznat će se osnovama razvoja programske podrške u Haskellu.

Ishodi učenja

  1. Definirati osnovne koncepte funkcijskog programiranja u Haskellu
  2. Objasniti sintaksu i semantiku programa u Haskellu
  3. Primijeniti Haskell za rješavanje jednostavnijih praktičnih problema
  4. Primijeniti funkcijske idiome i obrasce
  5. Koristiti gotove programske biblioteke za rješavanje složenijih problema
  6. Usporediti dva programa te utvrditi koji je program bolji prema zadanome kriteriju
  7. Dizajnirati programe u Haskellu

Oblici nastave

Predavanja

Tri sata nastave tjedno kroz 15 tjedana.

Laboratorijske vježbe

Dva sata predavanja ispresijecana su s nekoliko praktičnih vježbi na računalu (ukupno jednan sat vježbi na svaka dva sata predavanja).

Programske vježbe

Studenti će dobivati domaće zadaće u obliku programskih zadataka, a svoja rješenja demonstrirat će nastavniku ili demonstratoru.

Način ocjenjivanja

Kontinuirana nastava Ispitni rok
Vrsta provjere Prag Udio u ocjeni Napomena / komentar Udio u ocjeni
Laboratorijske vježbe 50 % 100 % 0 % 0 %

Tjedni plan nastave

  1. Uvod u funkcijsko programiranje. GHC prevodioc i drugi resursi.
  2. Osnovni jezični konstrukti. N-torke i liste.
  3. Tipovi i tipski razredi.
  4. Sintaksa funkcija.
  5. Rekurzivne funkcije. Korekurzivne funkcije.
  6. Funkcije višeg reda 1.
  7. Funkcije višeg reda 2.
  8. Korisnički definirani tipovi podataka 1.
  9. Korisnički definirani tipovi podataka 2. Moduli.
  10. Korisnički definirani tipovi podataka 3. Standardna biblioteka.
  11. Ulazno-izlazne operacije 1.
  12. Ulazno-izlazne operacije 2. Generator slučajnih brojeva.
  13. Monade i monadičko programiranje 1.
  14. Monade i monadičko programiranje 2.
  15. Striktnost. Dokumentiranje programskog koda. Paketi.

Studijski programi

Automatika -> Elektrotehnika i informacijska tehnologija (Profil)

Automatika -> Elektrotehnika i informacijska tehnologija (Profil)

Elektrotehnički sustavi i tehnologija -> Elektrotehnika i informacijska tehnologija (Profil)

Elektrotehnički sustavi i tehnologija -> Elektrotehnika i informacijska tehnologija (Profil)

Elektrotehnika i informacijska tehnologija -> Elektrotehnika i informacijska tehnologija i Računarstvo (Studij)

Elektroenergetika -> Elektrotehnika i informacijska tehnologija (Profil)

Elektroenergetika -> Elektrotehnika i informacijska tehnologija (Profil)

Računarstvo -> Elektrotehnika i informacijska tehnologija i Računarstvo (Studij)

Automatika -> Elektrotehnika i informacijska tehnologija (Modul)

Elektroničko i računalno inženjerstvo -> Elektrotehnika i informacijska tehnologija (Profil)

Elektroničko i računalno inženjerstvo -> Elektrotehnika i informacijska tehnologija (Profil)

Elektroenergetika -> Elektrotehnika i informacijska tehnologija (Modul)

Elektronika -> Elektrotehnika i informacijska tehnologija (Profil)

Elektronika -> Elektrotehnika i informacijska tehnologija (Profil)

Elektroničko i računalno inženjerstvo -> Elektrotehnika i informacijska tehnologija (Modul)

Obradba informacija -> Informacijska i komunikacijska tehnologija (Profil)

Obradba informacija -> Informacijska i komunikacijska tehnologija (Profil)

Elektronika -> Elektrotehnika i informacijska tehnologija (Modul)

Telekomunikacije i informatika -> Informacijska i komunikacijska tehnologija (Profil)

Telekomunikacije i informatika -> Informacijska i komunikacijska tehnologija (Profil)

Radiokomunikacijske tehnologije -> Elektrotehnika i informacijska tehnologija (Modul)

Radiokomunikacijske tehnologije -> Informacijska i komunikacijska tehnologija (Profil)

Radiokomunikacijske tehnologije -> Informacijska i komunikacijska tehnologija (Profil)

Obradba informacija -> Računarstvo (Modul)

Programsko inženjerstvo i informacijski sustavi -> Računarstvo (Profil)

Programsko inženjerstvo i informacijski sustavi -> Računarstvo (Profil)

Programsko inženjerstvo i informacijski sustavi -> Računarstvo (Modul)

Računalno inženjerstvo -> Računarstvo (Profil)

Računalno inženjerstvo -> Računarstvo (Profil)

Računalno inženjerstvo -> Računarstvo (Modul)

Računarska znanost -> Računarstvo (Profil)

Računarska znanost -> Računarstvo (Profil)

Računarska znanost -> Računarstvo (Modul)

Telekomunikacije i informatika -> Računarstvo (Modul)

Literatura

Miran Lipovača (2011.), Learn You a Haskell for Great Good!: A Beginner's Guide, No Starch Press
Graham Hutton (2007.), Progamming in Haskell, Cambridge University Press
Bryan O'Sullivan, Don Stewart, John Goerzen (2008.), Real World Haskell, O'Reilly Media
Simon Thompson (1999.), Haskell: The Craft of Functional Programming, Addison Wesley
Paul Hudak (2000.), The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press

Bodovi i izvedba

4 ECTS
R3 Engleski jezik
R1 E-učenje
30 Predavanja
0 Auditorne vježbe
15 Laboratorijske vježbe

Ocjenjivanje

izvrstan
vrlo dobar
dobar
dovoljan