Principles of Programming Languages

This course presents the main aspects of the programming languages landscape, by analyzing similarities and differences, approaches and paradigms, both traditional and new.

Professor Matteo Pradella

Twitter Tag


This repository contains the material related to the practical classes of the course.

A brand new Slack Group is available to discuss about course issues and PPL related topis. Use or email to access it.


28/10/2016 Scheme 1

  • Code Style Guide
  • Basic Concepts: recursion, tail recursion, conditional structures, variable binding (define, let, let*), named let
  • Basic Lists: handy functions, immutability, quick-sort

04/11/2016 Scheme 2

  • Named let translations
  • Argument Passing and Keywords
  • Vectors: Quick Sort
  • Structs: Trees
  • Macro ( quick overview)

11/11/2016 Scheme 4

  • Macro: why, examples: for,
  • Continuations: first steps

15/11/2016 Scheme 4

  • Continuations: clarifiction, coroutines, choose
  • Higher order functions: exercise on foldl, foldr
  • Macro: repeat-until

02/12/2016 Haskell 1

  • basics: function, lists, pattern matching, currying, guards
  • Higher order functions (foldl), list comprehension
  • Types: Binary Tree TraffiLight

21/12/2016 Haskell 2

  • basics: aias, accessor, type sum and products
  • Towards Monads: Foldable, Functor, Applicative (Logger example)

13/01/2016 Haskell 3

  • Repetita Iuvant: Functor, Applicative
  • Logger as a Monad
  • Monadic Laws, do notation

20/01/2016 Haskell 4

  • Logger Monad (tree ex)
  • State Monad

24/01/2017 Erlang 1

  • Types: Lists, Tuples, atoms, primitives
  • List comprehension, pattern matching,
  • conditionals: guards, if
  • higher order functions 1

27/01/2017 Erlang 2

  • Higer order functions 2: foldL,foldR, filter
  • conditionals: case of
  • Actors and Concurrency: spawn, messages, links
  • Publish Subscribe Example

Proposed Homeworks

- [Scheme] Alternative tree representation
- [Scheme] Heap priority queue structure
- [Scheme] Dijkstra's Algorithm
- [Scheme] Think lambda as macros
- [Scheme] coroutines as macros?
- [Scheme] choose with arrays trying a random order fro selecting next paths
- [Haskell] Monadic Heap
- [Erlang] Filter, Map with folds
- [Erlang] Tree in Erlang
- [Erlang] Improve publish subscribe as indicated in the pubsub-3.erl file
- [Erlang] Distributed Dijkstra's Algorithm.

Research Digressions

Thanks for all the fish!