Describir: Prolog programming in depth