Functional programming

Computer Science and Mathematics, Second Cycle
1 year
slovenian, english
Course director:

Zoran Bosnić

Lecturer (contact person):

Zoran Bosnić

Hours per week – 1. semester:

There are no prerequisites.

Content (Syllabus outline)

The course teaches the concept and use of a functional programming paradigm and connects it to the programming language theory through a deeper understanding of programming language concepts. The content contains:
1. Introduction to functional programming.
2. Concepts of: environment, lexical and semantic scope.
3. Basics of Standard ML (syntax, semantics, basic and complex data types, options, custom types) and concepts:

-pattern matching,
-higher order functions, currying,
-working with modules.
4. Basics of Racket programming language and concepts:

-eager and lazy evaluation,
-delay and force,
-building custom datatypes,
-functions with variable number of arguments,
-making an interpreter.
5. Comparison of functional and object-oriented programming.
6. Different types of typing (static/dynamic, weak/strong, implicit/explicit) and soundness/completeness of a type system.

  1. R. Pucella: Notes on Programming SML/NJ, Cornell, 2001
  2. Matthew Flatt, Robert Bruce Findler et al.: The Racket Guide, 2015.
  3. Ravi Sethi: Programming Languages: concepts &, constructs. Addison-Wesley, 1996.
  4. A. Tucker, R. Noonan: Programming Languages: Principles and Paradigms. McGraw-Hill, 2007.
Objectives and competences

Students who finished the undergraduate study of computer science already completed courses on basics of programming and mostly used the object-oriented programming paradigm. The objective of this course is to present alternative programming techniques with the emphasis on functional programming. The course will help develop students' skills in critical, analytical and synthetic thinking for use and understanding of programming languages as basic tools of each programmer.

Intended learning outcomes

After the completion of the course the student will be able to:

  • differentiate between the object-oriented and functional programming paradigms,
  • describe advantages of avoiding mutation and program side-effects,
  • use pattern matching, higher-order functions, own data types and lazy evaluation,
  • differentiate between statically/dynamically, implicitly/explicitly, weakly/strongly typed programming languages,
  • design own simple programming language,
  • argue which programming paradigm is the most suitable for solving a given problem.
Learning and teaching methods

Lectures, homeworks and seminar works with special emphasis on individual work.


Continuing (homework)
Final (written or oral exam)
grading: 5 (fail), 6-10 (pass) (according to the Statute of UL)

Lecturer's references

OCEPEK, Uroš, RUGELJ, Jože, BOSNIĆ, Zoran. Improving matrix factorization recommendations for examples in cold start. Expert systems with applications, ISSN 0957-4174. [Print ed.], Nov. 2015, vol. 42, no. 19, str. 6784-6794.
BOSNIĆ, Zoran, KONONENKO, Igor. Estimation of individual prediction reliability using the local sensitivity analysis. Appl. intell. (Boston). [Print ed.], Dec. 2008, vol. 29, no. 3, p. 187-203, ilustr.
BOSNIĆ, Zoran, KONONENKO, Igor. Comparison of approaches for estimating reliability of individual regression predictions. Data knowl. eng.. [Print ed.], Dec. 2008, vol. 67, no. 3, p. 504-516
BERDAJS, Jan, BOSNIĆ, Zoran. Extending applications using an advanced approach to DLL injection and API hooking. Software, ISSN 0038-0644, 2010, vol. 40, no. 7, str. 567-584.
BOSNIĆ, Zoran, KONONENKO, Igor. Automatic selection of reliability estimates for individual regression predictions. Knowl. eng. rev., 2010, vol. 25, no. 1, p. 27-47
Celotna bibliografija je dostopna na SICRISu:,id=31318.