;/2 -- if-then-else


+-P -> +*Q ; +*R

If P then Q else R, using first solution of P only.


P callable [MOD]

Q callable [MOD]

R callable [MOD]


The character | can be used as an alternative to ;, giving the form:

     P -> Q | R

The | is transformed into a ; when the goal is read.

First P is executed. If it succeeds, then Q is executed, and if Q fails, the whole conditional goal fails. If P fails, however, R is executed instead of Q.

The operator precedences of the ; and -> are both greater than 1000, so that they dominate commas.


If P succeeds and Q then fails, backtracking into P does not occur. P may not contain a cut. -> acts like a cut except that its range is restricted to within the disjunction: it cuts away R and any choice points within P. -> may be thought of as a "local cut".

See Also

bas-eff-cdi and ref-sem-dis