prolog review, in-depth algorithms, and examples