Prolog Programming in Depth