Programiranje u Haskellu

Prikazani su podaci za akademsku godinu: 2023./2024.

Laboratorijske vježbe

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.

Studijski programi

Sveučilišni preddiplomski
Vještine - 3. semestar (3. semestar)
Vještine - 5. semestar (5. semestar)
Vještine - 3. semestar (3. semestar)
Vještine - 5. semestar (5. semestar)
[FER2-HR] Automatika - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Bežične komunikacijske tehnologije - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Elektroenergetika - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Elektroničko i računalno inženjerstvo - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Elektronika - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Elektrotehnika i informacijska tehnologija - studij
Vještine - 3. semestra (3. semestar)
[FER2-HR] Obradba informacija - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Programsko inženjerstvo i informacijski sustavi - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Računalno inženjerstvo - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Računarska znanost - modul
Vještine - 5. semestra (5. semestar)
[FER2-HR] Računarstvo - studij
Vještine - 3. semestra (3. semestar)
[FER2-HR] Telekomunikacije i informatika - modul
Vještine - 5. semestra (5. semestar)
Sveučilišni diplomski
Vještine - dipl.studij_FER3 - 1. semestar (1. semestar)
Vještine - dipl.studij_FER3 - 3. semestar (3. semestar)
Vještine - dipl.studij_FER3 - 1. semestar (1. semestar)
Vještine - dipl.studij_FER3 - 3. semestar (3. semestar)
Vještine - dipl.studij_FER3 - 1. semestar (1. semestar)
Vještine - dipl.studij_FER3 - 3. semestar (3. semestar)
[FER2-HR] Automatika - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Bežične komunikacijske tehnologije - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Elektroenergetika - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Elektroničko i računalno inženjerstvo - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Elektronika - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Elektrotehnički sustavi i tehnologija - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Obradba informacija - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Programsko inženjerstvo i informacijski sustavi - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Računalno inženjerstvo - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Računarska znanost - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)
[FER2-HR] Telekomunikacije i informatika - profil
Vještine - dipl.studij - 1. semestar (1. semestar)
Vještine - dipl.studij - 3. semestar (3. semestar)

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 Prag Udio u ocjeni
Laboratorijske vježbe 50 % 70 % 0 % 0 %
Seminar/Projekt 50 % 30 % 0 % 0 %
Međuispit: Pismeni 50 % 0 % 0 %
Napomena / komentar

Međuispit ne doprinosi ukupnim bodovima, ali je potrebno točno riješiti barem 50% međusipita.

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.

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

Za studente

Izvedba

ID 127252
  Zimski semestar
4 ECTS
R3 Engleski jezik
R1 E-učenje
30 Predavanja
0 Seminar
0 Auditorne vježbe
15 Laboratorijske vježbe
0 Konstrukcijske vježbe
0 Vježbe tjelesnog odgoja

Ocjenjivanje

izvrstan
vrlo dobar
dobar
dovoljan