11.3.100 if/3

Synopsis

if(+P,+Q,+R)

If P then Q else R, for all solution of P.

Arguments

:P
callable, must be nonvar
:Q
callable, must be nonvar
:R
callable, must be nonvar

Description

Analogous to

     if P then Q else R

but differs from P -> Q ; R in that if(P, Q, R) explores all solutions to the goal P. There is a small time penalty for this—if P is known to have only one solution of interest, the form P -> Q ; R should be preferred.

This is normally regarded as part of the syntax of the language, but it is like a built-in predicate in that you can write call(if(P,Q,R)).

Cuts in P do not make sense, but they are allowed, their scope being the goal P. The scope of cuts in Q and R extends to the containing clause.

Backtracking

Depends on the arguments.

Exceptions

Call errors (see ref-sem-exc).

See Also

ref-sem.


Send feedback on this subject.