Course details
Functional and Lifetime Programming
FLP Acad. year 2025/2026 Summer semester 5 credits
Practical applications and broader introduction into lambda calculus within the context of functional programming languages. Data ownership and lifetime within the context of programming language rust. Within functional programming, abstract data types are discussed, as well as the use of recursion and induction, manipulation of lists and infinite data structures in language Haskell. Within the context of programming language rust, there are presented issues of programming in language with fully deterministic and automatic memory management.
Why is the course taught
Purely declarative programming languages are such a phenomenon, which enables to get a new viewpoint on many problems and, thus, one can obtain new, original solutions. The programming language rust offers high efficiency and multithreaded programming even if it is fully compiled.
Exam prerequisites
At the end of a term, a student should have at least 20 points out of 40 possible, plus
- at least 4 points from project on functional programming (12 possible),
- and at least 3 points from project on programming language rust (8 possible).
Plagiarism and not allowed cooperation will cause that involved students are not classified and disciplinary action can be initiated.
Guarantor
Course coordinator
Language of instruction
Completion
Time span
- 26 hrs lectures
- 12 hrs pc labs
- 14 hrs projects
Assessment points
- 60 pts final exam (written part)
- 20 pts mid-term test (written part)
- 20 pts projects
Department
Lecturer
Instructor
Learning objectives
Obtaining a basic knowledge and practical experience in functional programming and programming in language rust. Introduction into formal concepts used as a theoretical basis for both paradigms.
Students will get basic knowledge and practical experience in functional programming (the important representative of declarative programming). Moreover, they will get basic information about theoretical basis of the functional paradigm and implementation techniques.
Use and understanding of recursion for expression of algorithms.
Working with data lifetime and owner principles to achieve maximum performance in a compiled programming language with fully automatic and deterministic memory management.
Prerequisite knowledge and skills
Methods of processing (analysis, evaluation/interpretation/translation) of programming languages, basic concepts and experience with programming languages and their use.
Study literature
- Podklady k přednáškám (slajdy, ukázky, ...)
- Thompson, S.: Haskell, The Craft of Functional Programming, ADDISON-WESLEY, 1999, ISBN 0-201-34275-8
- Jones, S.P.: Haskell 98 Language and Libraries, Cambridge University Press, 2003, p. 272, ISBN 0521826144
- Bieliková, M., Návrat, P.: Funkcionálne a logické programovanie, Vydavateĺstvo STU, Vazovova 5, Bratislava, 2000.
- Klabnik, S., Nichols, C., Krycho, C., et al: The Rust Programming Language, Online, 2025, dostupné z: https://doc.rust-lang.org/book/ . [citováno 2025-12-04]
Fundamental literature
-
Lipovača, M.: Learn You a Haskell for Great Good!, No Starch Press, 2011, ISBN-13: 978-1-59327-283-8
-
Klabnik, S., Nichols, C., Krycho, C., et al: The Rust Programming Language, Online, 2025, dostupné z: https://doc.rust-lang.org/book/ . [citováno 2025-12-04]
Syllabus of lectures
- Introduction to functional programming
- Lambda calculus
- Programming language Haskell, introduction, lists
- User-defined data types, type classes, and arrays in Haskell
- Input/Output in Haskell - type classes IO and Monad
- Proofs in functional programming
- Denotational semantics, implementation of functional languages
- Rust, introduction, shadowing, compound types
- Control flow, ownership
- Slices, data structures
- Packages, built-in collections
- Errors, generic types
- Lifetime, discussion, conclusion
Syllabus of computer exercises
- Haskell - basic language features, recursion, lists, partial application, higher-order functions (map, filter, foldX), infinite lists, partial evaluation
- Haskell - data types, monads, I/O
- Haskell - demonstration - construction of a simple interpreter using library Parsec
- Rust - cargo, shadowing, compound types, control flow, slices
- Rust - data structures, packages, built-in collections
- Rust - generic types, lifetime
Syllabus - others, projects and individual work of students
- A simple program in Haskell programming language (Hugs, GHC, GHCi).
- A simple program in Rust (cargo).
Progress assessment
- Mid-term exam, for which there is only one schedule and, thus, there is no possibility to have another trial.
- Two projects should be solved and delivered in a given date during a term.
- Mid-term exam - written form, questions and exercises to be answered and solved, no possibility to have a second/alternative trial - 20 points.
- Projects realization - 2 projects, implementation of a simple program according to the given specification - one in a functional programming language the other in the programming language rust - 20 points all projects together.
- Final exam - written form, questions and exercises to be answered and solved, 2 another corrections trials possible (60 points - the minimal number of points which can be obtained from the final exam is 25, otherwise, no points will be assigned to a student).
Schedule
| Day | Type | Weeks | Room | Start | End | Capacity | Lect.grp | Groups | Info |
|---|---|---|---|---|---|---|---|---|---|
| Mon | lecture | 1., 2., 3., 4., 5., 6., 7., 8., 10., 11., 12., 13. of lectures | E104 E105 E112 | 13:00 | 15:50 | 294 | 1MIT 2MIT | NBIO - NSPE NEMB xx | Kolář |
| Mon | comp.lab | 1., 3., 5., 7., 11., 13. of lectures | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | |
| Mon | comp.lab | 2., 4., 6., 8., 10., 12. of lectures | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | |
| Mon | comp.lab | 1., 3., 5., 7., 11., 13. of lectures | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | |
| Mon | comp.lab | 2., 4., 6., 8., 10., 12. of lectures | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | |
| Tue | comp.lab | 1., 3., 5., 7., 9., 11., 13. of lectures | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | |
| Tue | comp.lab | 2., 4., 6., 8., 10., 12. of lectures | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | |
| Tue | comp.lab | 1., 3., 5., 7., 9., 11., 13. of lectures | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | |
| Tue | comp.lab | 2., 4., 6., 8., 10., 12. of lectures | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | |
| Thu | comp.lab | 1., 3., 5., 7., 9., 11., 13. of lectures | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | |
| Thu | comp.lab | 2., 4., 6., 8., 10., 12. of lectures | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | |
| Thu | comp.lab | 1., 3., 5., 7., 9., 11., 13. of lectures | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | |
| Thu | comp.lab | 2., 4., 6., 8., 10., 12. of lectures | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | |
| Fri | comp.lab | 1., 3., 5., 7., 9., 11. of lectures | N204 N205 | 09:00 | 10:50 | 40 | 1MIT 2MIT | xx | |
| Fri | comp.lab | 2., 4., 6., 10. of lectures | N204 N205 | 09:00 | 10:50 | 40 | 1MIT 2MIT | xx | |
| Fri | comp.lab | 1., 3., 5., 7., 9., 11. of lectures | N204 N205 | 11:00 | 12:50 | 40 | 1MIT 2MIT | xx | |
| Fri | comp.lab | 2., 4., 6., 10. of lectures | N204 N205 | 11:00 | 12:50 | 40 | 1MIT 2MIT | xx |
Course inclusion in study plans