The C++ programming language actually supports two major programming paradigms: imperative programming, which was already present in the programming language C, and object-oriented programming, with which C++ extended C. There are at least two other, very different, programming paradigms: functional programming and logic programming. Today we will have a significant encounter with the fundamental notion of recursion and the functional programming language Scheme. Scheme is a descendent of Lisp, which was the second programming language to be invented, preceded only by Fortran, which C++ can claim as an ancester. Fortran was invented in order to compute. Lisp was invented in order to manipulate symbolic information. Although we will not see it today, Prolog is a good example of a logic programming language. Both Lisp and Prolog are essential tools for the artificial intelligence community. Scheme and related languages are important tools for people who study and create programming languages.