CloseHelpPrint
Kies de Nederlandse taal
Course module: 202200191
202200191
Functional and Logic Programming
Course info
Course module202200191
Credits (ECTS)5
Course typeStudy Unit
Language of instructionEnglish
Contact persondr. A. Hartmanns
E-maila.hartmanns@utwente.nl
Lecturer(s)
PreviousNext 4
Examiner
dr. G. Caltais
Lecturer
dr. G. Caltais
Lecturer
dr. T. van Dijk
Examiner
dr.ir. M.E.T. Gerards
Examiner
dr. A. Hartmanns
Academic year2022
Starting block
2B
RemarksTCS students register via Osiris; others contact modulesupport-tcs@utwente.nl. Minor students: register for the minor!
Application procedureYou apply via OSIRIS Student
Registration using OSIRISYes
Aims
After successful completion of this module, the student is able to:
  • Describe the major programming paradigms (FP, LP and CP) and their essential characteristics and differences
  • Write basic programs in all major programming paradigms
  • Solve non-trivial programming problems in FP and CP
  • Explain the concepts and importance of typing, in terms of FP and CC
  • Explain and use the typical types and data structures in FP and CP
  • Explain and take advantage of the evaluation and execution mechanisms of FP (lazy evaluation) and CP (hardware-related aspects, concurrency models)
  • Explain and use the following concepts of FP: recursion, list comprehension, higher order functions, function composition, lazy evaluation.
  • Explain and use the following concepts of CP: interleaving, fairness, deadlock, memory models, synchronisation, locking.
  • Explain and use the following concepts of CC: syntactic and semantic analysis, scanning, parsing, run-time organisation, code generation, optimisation.
  • Write a compiler for a non-trivial imperative language with concurrency features generating a given (dedicated) instruction set.
Content
Up until this point, the students have mainly learned imperative, object-oriented programming. This module will extend their awareness and ability in the following directions:
  • Non-imperative programming: in particular, the functional paradigm (extensively) and the logic paradigm (briefly)
  • Programming for concurrent systems: concepts, data structures and algorithms for multi-core and GPU-based parallelism
  • Programming language technology: parsing, compilation and code generation
These three strands are initially taught separately and come together in the module project, where the students develop a compiler for their own language with support for parallelism, generating code that runs on an extensible hardware emulator written in a functional language.
 
The module presents a mixture of
  • Lectures to provide an overview and motivation of the material
  • Exercise sessions to get familiar with the concepts
  • Laboratory exercises to practice the acquired skills
  • Small projects and a larger final project.
Assumed previous knowledge
Knowledge of programming (in Java) as taught for example in the module Software Systems.
Module
Module 8A
Participating study
Bachelor Technical Computer Science
Required materials
Course material
Compiler Construction and Programming language technology: Engineering a Compiler (Torczon & Cooper)
Course material
Concurrent Programming and Concurrent and Distributed Programming: Java Concurrency in Practice, 1/E (Goetz, Peierls, Bloch, Bowbeer, Holmes & Lea)
Syllabus
Modulehandleiding met aanvullend materiaal on Canvas
Recommended materials
Course material
Learn You a Haskell for Great Good (Miran Lipovača), digital book: http://learnyouahaskell.com/
Instructional modes
Lecture

Practical

Project supervised

Project unsupervised

Tutorial

Tests
Functional and Logic Programming Project

Functional Programming Test

CloseHelpPrint
Kies de Nederlandse taal