Real World Programming in SWI-Prolog