When choosing the examples, I didn't go through the list of Ada reserved words and try to come up with an example for each one. If I did, the first example would have an abort statement in it, the second would show how to use the abs operator, and so on. These contrived examples wouldn't do much more than show syntax, which you should already know. Contrived examples often do things strange ways just for the sake of illustrating a point, and this sometimes teaches bad programming habits. That's a good way to show recursion, but a terrible way to compute N factorial.
Students often miss the point of the example.
If the homework assignment is to write an excellent program to compute N factorial, guess how most of the students will do it. I used practical examples with real applications, so the examples determined what Ada features were demonstrated and their order of appearance. This approach gives the most exposure to the most commonly used Ada features, and less emphasis on the less important ones. The only two Ada features that didn't get a fair shake from this approach were tasking and access types. There are so many things that need to be considered when using tasking, I might be able to devote almost an entire book to it.