Searching Techniques in Prolog