In the ﬁrst half of the book, we have studied some elementary mathematical objects such as numbers, geometrical objects, sets, trees, and graphs. In this half of the book, we are going to implement them on the computer. This is done not only for solving practical problems, but also (and mainly) to get a better idea about these abstract objects, and get a better insight about their nature and features. For this purpose, it is particularly important that the mathematical objects used in the code enjoy the same features, functions, operations, and notations as in their original mathematical formulation. This way, the program can use the same point of view used in the very deﬁnition of the mathematical objects. Furthermore, the programming may even contribute to a better understanding and feeling of the mathematical objects, and help develop both theory and algorithms.