Циљ и исход предмета
Упознавање са математичким основама функционалног програмирања и парадигмом функционалног програмирања. Стицање вештина за напредно коришћење једног чисто функционалног програмског језика. По завршетку курса студент познаје математичку основу функционалног програмирања, разуме разлику између императивног и функционалног програмирања и уме да препозна проблеме који се решавају функционалним програмирањем. Студент је упознат са једним чисто функционалним програмским језиком, уме да га користи у решавању сложених задатака и изради практичног софтверског пројекта.
Теоријска настава
Функционални програмски језици. Разлика између функционалног и императивног програмирања. Основе ламбда рачуна: апстракција, ламбда функција, ламбда апликација, слободне и везане променљиве. Редукције у ламбда рачуну. Нормална форма. Израчунавање вредности ламбда израза и валидни ламбда изрази. аритметика целих бројева, логички и условни изрази у ламбда рачуну. Рекурзија у ламбда рачуну и ипсилон комбинатор. Апликативни и нормални поредак израчунавања ламбда израза. Лења евалуација. Бесконачне структуре. Ламбда изрази у програмским језицима. Решавање проблема на „функционалан“ начин. Функтори, апликативни функтори и моноиди. Монаде. Парсер комбинатори.
Практична настава
Структуре података и синтакса изабраног функционалног програмског језика. Функције вишег реда и каријеве функције. Решавање задатака у изабраном функционалном програмском језику. Преглед уграђених функција и оператора у изабраном функционалном програмском језику. Задаци са функторима, апликативним функторима, моноидима и монадама. Коришћење библиотеке парсер комбинатора на илустративним примерима парсирања текста.