Describir: Clause and effect. Prolog programming for the working programmer