When a goal belonging to a defined predicate is invoked a new
frame is created. When the interpreter encounters a cut (!) it
will remove the choice points inside the frame. To instruct the
interpreter that cuts can nevertheless propagate a defined
predicate can be marked as cut transparent via the predicate
?- X = a; X = b.
X = a ;
X = b
?- X = a, !; X = b.
X = a
Some of the predefined logical predicates are cut transparent in all arguments. This includes the predicates (,)/2 and (;)/2. Others are only cut transparent in a few arguments. This includes the predicates (->)/2 and (*->)/2, and also the special forms in connection with the predicate (;)/2. Others, such as call/1, once/1 and (\+)/1, are not cut transparent at all.
The following logical predicates are provided:
The following predicate properties for logical predicates are provided: