After doing some Prolog programming for a while, there are some useful advanced Prolog techniques. First, tail recursion is very powerful. With the tail recursion it allows the Prolog compiler can optimize code without having to save the pointer for backtracking. This is useful since it does not build the stack with up and crash the program with stack overflow errors.
Second, the conversion of complex structures into a list using the Univ operator. I have worked with some complex data structures in my agent code for the blocks world program. By converting the data structure into a list, it was easy to process the required functors. Then upon process completion, the list was converted back to a data structure.