Course topics
Part 1.- Programming paradigms.
- Why functional programming?
- Expressions and their computational model.
- Conditionals and boolean expressions.
- Value definitions.
- Internal definitions.
- Block structures and lexical scoping.
- Procedures and computational processes
- Functions as data. Combining functions.
- Higher-order functions (HOFs).
- Function literal.
- Closures.
- Currying.
- Map and reduce example.
- Types and polymorphic functions.
- Correctness of programs.
- Data abstraction.
- Functions as data abstraction mechanism.
- Specialised data abstraction mechanism – classes
- Recursive definitions of data structures.
- Structural induction.
- Hierarchical data and pattern matching.
- Processing elements in containers.
- Singly linked list, polymorphism.
- Lazy computations.
- Introduction to parallel computing.
- Basic primitives to express parallel computing.
- Benchmarking program performance.
- Basic parallel constructs.
- First-class task parallelism.
- How fast can we get with parallel computations?
- Data-parallel operations map, fold and scan.
- Parallel functoriality (aka parallel map)
- Monoids, associativity and parallelism.
- Folding (reducing) in parallel.
- Scanning in parallel.
- Task vs data parallelism.