6 ECTS credits
150 h study time

Offer 1 with catalog number 4020432ENR for all students in the 1st semester at a (E) Master - advanced level.

Semester
1st semester
Enrollment based on exam contract
Impossible
Grading method
Grading (scale from 0 to 20)
Can retake in second session
Yes
Taught in
English
Faculty
Faculty of Science and Bio-engineering Sciences
Department
Computer Science
Educational team
Jens Nicolay (course titular)
Activities and contact hours

26 contact hours Lecture
26 contact hours Seminar, Exercises or Practicals
Course Content
  1. Fundamentals of Higher Order Programming
    1. Scheme S-expressions, Function definitions
    2. Lexical Scoping
    3. Iteration as Optimised Tail Recursion
    4. Higher Order Procedures and Anonymous Lambda’s.
  2. Advanced Higher Order Programming
    1. Cons-cells, lists and nested lists.
    2. List processing and Higher Order List Procedures
    3. Symbols and Homoiconicity: Quoting Lists
    4. Case Study: Symbolic derivation
  3. Fundamental Concepts of State, Scoping and Evaluation Order.
    1. begin, set! and mutable state 
    2. Objects as closures
    3. Environment diagrams, box-and-pointer diagrams
    4. (Infinite) streams and lazy evaluation.
    5. delay and force.
  4. Continuations and current-continuations
    1. Continuations
    2. call-with-current-continuation
    3. An implementation of goto, yield, coroutines and exception handling.
  5. Semantics of Higher-Order Languages
    1. Concrete vs. Abstract Syntax
    2. Meta circular interpretation
    3. The analysing interpreter (i.e. compiler)
    4. CPS interpretation and semantics of call-with-current-continuation
  6. Variations
    1. A lazy evaluation version of Scheme + thunkified interpreter
    2. A nondeterministic version of Scheme + continuation-based interpreter
  7. Introduction to the lambda-calculus
    1. lambda-expressions and beta-reduction
    2. Computability in lambda-calculus: a construction of functional programming languages
    3. Recursion and the Fixed-point Theorem.
Additional info

Study Material

The transparencies that are used in the lectures are made available to the students. A large part of the course follows chapters 1-4 from “Structure and Interpretation of Computer Programs” (Abelson & Sussman, 2nd edition 1996).

Learning Outcomes

General Compentencies

This is a compressed version of the courses “Structure of Computer Programs”, “Interpretation of Computer Programs” and “Logic and Formal Systems” of the Bachelor program in Computer Science. Instead of teaching the material at a beginner’s level, it is assumed that students are already fluent at programming in some mainstream language such as Python, C, C++ or Java. 

 

Knowledge and Understanding: The course first enhances the students programming skills by introducing higher-order procedures and anonymous functions. Subsequently the theme is explored of objects as closures and streams as delayed infinite computations. The remainder of the course is about the fundamental concepts that are at the heart of programming languages, programming language semantics and the implementation of higher order programming languages. We will study and implement interpreters for programming languages and some variations.

Application of Knowledge and Understanding:  This is a course that gives students the foundations to study and understand any modern programming languages from a conceptual point of view. Instead of focussing on surface syntax and phenomenological aspects, the course delves deep into the semantics of languages and therefore gives a strong basis for applying its content to the future study of programming languages. After talking the course, students will be many times faster in learning a new programming language than before.

This course explicitly prepares students to study modern programming languages like Clojure, Erlang or Scala in a scientifically founded way.

Making Judgements: An important learning outcome is that students will be able to judge the quality of new programming languages or programming languages features. As an example, we take Java8 which is widely said to “finally have lambdas”. Students that took this course will be able to see right through such marketing-oriented statements. 

Communication: Students will build up the precise vocabulary to communicate about programming languages and higher order programs in a very precise and semantically meaningful way.

Grading

The final grade is composed based on the following categories:
Other Exam determines 100% of the final mark.

Within the Other Exam category, the following assignments need to be completed:

  • Other exam with a relative weight of 1 which comprises 100% of the final mark.

    Note: The mark is given as a combination of an oral exam and a project the students have to execute in Scheme. Both parts are equally important.

Additional info regarding evaluation

The mark is given as a combination of an oral exam and a project the students have to execute in Scheme. Both parts are equally important.

Allowed unsatisfactory mark
The supplementary Teaching and Examination Regulations of your faculty stipulate whether an allowed unsatisfactory mark for this programme unit is permitted.

Academic context

This offer is part of the following study plans:
Bachelor of Mathematics and Data Science: Standaard traject (only offered in Dutch)
Master of Applied Sciences and Engineering: Computer Science: Artificial Intelligence
Master of Applied Sciences and Engineering: Computer Science: Multimedia
Master of Applied Sciences and Engineering: Computer Science: Software Languages and Software Engineering