The Exit And Done Ports

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).
     
The Exit Port
                         descendant(X, Y) :-
                                 parent(X, Y). --->
                         descendant(X, Z) :-
                                 parent(X, Y),
                                 descendant(Y, Z).
     
The Done Port