The dreaded cut. As usual, its use is not recommended. It is often more
appropriate to use once/1.
fail
Always fails.
true
Always succeeds.
repeat
Always succeeds, even on backtracking.
+B1 , +B2
Logical conjunction.
+B1 ; +B2
Logical disjunction. A cut inside one of these will behave very strangely.
That is, it will behave as if the two sides of the ``;''
are separate rules.
bsphackfloatpenalty -Mii
floatpenalty-Miii
parmoderrfloatpenalty@
nextcurrboxfreelist
currbox-2floatpenalty@ fltovf
currboxtempboxa
tempboxa
@floatesphackbsphackfloatpenalty -Mii
floatpenalty-Miii
parmoderrfloatpenalty@
nextcurrboxfreelist
currbox-3floatpenalty@ fltovf
currboxtempboxa
tempboxa
@floatesphack
(Note that because ;/2 is currently implemented as a meta call
it may sometimes not behave as if it was defined using an auxiliary predicate.
This can occur if there is an arithmetic term that causes failure.
The following short example illustrates the difference between
try/3 and try1/3 for the goal ?- try(X, 1, 0),
try(X, Y, Z) :- X=Y/Z ; X=1.
try1(Y/Z,Y,Z). try1(1,Y,Z).
This may possibly change to be the same in some future version.)
bsphackfloatpenalty -Mii
floatpenalty-Miii
parmoderrfloatpenalty@
nextcurrboxfreelist
currbox-4floatpenalty@ fltovf
currboxtempboxa
tempboxa
@floatesphack
+C -> +B1 ; +B2
If C then call B1 otherwise call B2. Uses unsafe negation.
Inefficient, since it uses call/1. A cut inside one of these will behave
very strangely.