The exit and done ports are shown by an arrow to the right of a goal, pointing away from it. This indicates the successful completion of a goal. The exit port is distinguished from the done port by having a forked tail; this is meant to reflect the fact that this is only one of possibly many solutions to this goal. The done port signifies a determinate exit. This will help you find goals that are nondeterminate and shouldn't be.
descendant(X, Y) :- parent(X, Y). ===> descendant(X, Z) :- parent(X, Y), descendant(Y, Z).
descendant(X, Y) :- parent(X, Y). ---> descendant(X, Z) :- parent(X, Y), descendant(Y, Z).