[ Control | Reference Manual | Alphabetic Index ]

# +Goal1 ; +Goal2

Semicolon (OR) operator - Succeeds if the goal Goal1 succeeds or if the goal Goal2 succeeds.

Goal1
  Atom or compound term.
Goal2
  Atom or compound term.

## Description

Succeeds if either of Goal1 and Goal2 succeeds.

If Goal1 has the special form A -> B (or A *-> B) then the disjunction turns into an if-then-else construct. See those predicates for details.

!/0 cuts through ;/2.

### Modes and Determinism

- ;(+, +) is nondet

### Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

### Fail Conditions

Fails if both Goal1 and Goal2 fail

### Resatisfiable

Resatisfiable if Goal1 does not contain a literal cut

## Examples

    Success:
          1 == 2; 2 == 2.

          [eclipse]: (write(a), fail) ; (write(b); write(c)).
          ab
          yes.

          [eclipse]: (write(a); write(b)), write(c).
          ac
          yes.

    Fail:
          1 == 2; 3 == 2.

## See Also

! / 0, -> / 2, *-> / 2