CMPUT 325 - Non-Procedural Programming Languages

Programming languages that are based on functions or logic are representatives of what is called declarative programming, due to the fact that (to some extent) the users state what to be solved and the computers solve it. Programs written in declarative languages are usually self-explanatory, succinct, and much shorter than their counterparts in procedural or object-oriented languages.

This course introduces you to the functional and logic models of computation. It covers programming languages, theoretical foundations, implementations, and applications.

Functional programming is about writing and composing functions. The central idea lies in symbolic manipulation as computation -- the use of recursive functions defined over lists provides a computational framework with the full power of expressing deterministic computations. You will be presented with a brief overview of functional programming in LISP, and you will use it to solve a number of problems. We will introduce lambda calculus as a foundation for functional programming, and an abstract machine called SECD as a model of executing compiled lisp programs.

Logic programming draws the idea of programming as specifying solutions in a logic and logic deduction as computation. You will learn how to turn a subset of logic into a programming language. For the practical aspect, you will write small yet interesting programs in Prolog (PROgramming in LOGic). We will also introduce constraint programming, perhaps one of the most exciting developments in programming languages in the last decade.


  • Understand the main ideas in programming paradigms based on functions, logic and constraints
  • Be able to apply basic programming skills in Lisp and Prolog to solve practical problems

Course Work

  • Assignments
  • Midterm
  • Final Exam