Računalničarji moramo poleg osnov programiranja pridobiti tudi vpogled v drugačne programerske tehnike, kot sta proceduralno in objektno-usmerjeno programiranje. V zadnjih letih se izrazito uveljavlja funkcijski način programiranja, ki omogoča učinkovito razgradnjo programa na skupek neodvisnih funkcij, s katerimi je možno program izvajati tudi paralelno in s tem hitreje.

Pri predmetu se bomo učili funkcijskega pristopa k programiranju v jezikih Standardni ML in Racket. Spoznali bomo pojme, kot so tipizacija, leksikalni in dinamični doseg, funkcijska ovojnica, razvili pa bomo tudi interpreter za lasten programski jezik. Naš cilj bo pridobiti globje razumevanje v delovanje programskih jezikov in s tem doseči mojstrstvo pri programiranju.

Predpogoj za razumevanje snovi predmeta je poznavanje osnov programiranja v proceduralnih jezikih (Java, C++, Python) in razumevanje koncepta rekurzije.

Predmetno delo vključuje tedenske enakomerno zahtevne domače naloge, dve seminarski nalogi (rok za oddajo prve je v sredini semestra, druge pa ob koncu semestra) in končni izpit.