Cilj i ishod predmeta
Upoznavanje sa matematičkim osnovama funkcionalnog programiranja i paradigmom funkcionalnog programiranja. Sticanje veština za napredno korišćenje jednog čisto funkcionalnog programskog jezika. Po završetku kursa student poznaje matematičku osnovu funkcionalnog programiranja, razume razliku između imperativnog i funkcionalnog programiranja i ume da prepozna probleme koji se rešavaju funkcionalnim programiranjem. Student je upoznat sa jednim čisto funkcionalnim programskim jezikom, ume da ga koristi u rešavanju složenih zadataka i izradi praktičnog softverskog projekta.
Teorijska nastava
Funkcionalni programski jezici. Razlika između funkcionalnog i imperativnog programiranja. Osnove lambda računa: apstrakcija, lambda funkcija, lambda aplikacija, slobodne i vezane promenljive. Redukcije u lambda računu. Normalna forma. Izračunavanje vrednosti lambda izraza i validni lambda izrazi. aritmetika celih brojeva, logički i uslovni izrazi u lambda računu. Rekurzija u lambda računu i ipsilon kombinator. Aplikativni i normalni poredak izračunavanja lambda izraza. Lenja evaluacija. Beskonačne strukture. Lambda izrazi u programskim jezicima. Rešavanje problema na „funkcionalan“ način. Funktori, aplikativni funktori i monoidi. Monade. Parser kombinatori.
Praktična nastava
Strukture podataka i sintaksa izabranog funkcionalnog programskog jezika. Funkcije višeg reda i karijeve funkcije. Rešavanje zadataka u izabranom funkcionalnom programskom jeziku. Pregled ugrađenih funkcija i operatora u izabranom funkcionalnom programskom jeziku. Zadaci sa funktorima, aplikativnim funktorima, monoidima i monadama. Korišćenje biblioteke parser kombinatora na ilustrativnim primerima parsiranja teksta.