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,
-streams,
-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.