Forcing Goal Determinacy -- once(Goal)

We have seen that

     \+ Goal


     ( Goal -> false ; true )

have the same effect. The form

     ( Goal -> true ; false )

is also useful: it commits to the first solution of Goal.

This operation has a name:

     once Goal

once/1 is useful when you have a nondeterminate definition for Goal, but in this case you want to solve it determinately. For example, to find out if there are any married couples, you could use

     once married(_, _)

If the predicate is really determinate in concept, it is better to make it determinate in definition as well, rather than to use once/1.