PLOGHELP CONDITIONAL                                       Chris Mellish
                                Revised by Kathryn Seifert  October 1986

Operator which attempts goals conditionally

    ?- X -> Y; Z.

Keywords: or, conditional, conditional statement, arrow, operator,
          symbol


POPLOG Prolog allows for a simple form of "conditional statement" in
Prolog programs. The goal:

    ?- X -> Y; Z.

means if X can be satisfied (only consider its first solution), attempt
Y, otherwise attempt Z.

Backtracking can generate alternative solutions for Y or Z (whichever is
chosen), but cannot generate alternatives to X. Here is a simple use of
the conditional to define the factorial of a number:

    factorial(N1,FAC) :-
       (N1=0 -> FAC=1; N2 is N1 - 1, factorial(N2,FAC2), FAC is FAC2*N1).

Note that this could also have been defined by:

    factorial(0,1) :- !.
    factorial(N,FAC) :-
       N2 is N - 1, factorial(N2,FAC2), FAC is FAC2*N.

Indeed, it is often clearer to have several short clauses than a single,
deeply embedded clause. Note that if Y and Z are complex goals involving
disjunctions or more conditionals, it may be necessary to enclose them
in brackets.

The conditional is actually defined as a special case of the ';'
operator (see PLOGHELP * SEMICOLON). That is, (X -> Y; Z) is equivalent
to ;(->(X,Y),Z) and ';' is actually defined as if by:

    (X -> Y); Z  :-  X, !, Y.
    (X -> Y); Z  :- !, Z.
    X ; Y        :- X.
    X ; Y        :- Y.

Note: The conditional cannot appear in a top-level goal.

-- RELATED DOCUMENTATION ----------------------------------------------

PLOGHELP * SEMICOLON
 Operator to "or" two goals

PLOGHELP * SYMBOLS
 Summary and index of HELP files for symbols used in Prolog

PLOGHELP * OPERATORS
 Operator declarations made when the Prolog system is loaded
