Clause and Effect: Prolog Programming For The Working Programmer