protocol

# `loopp`

Loop control constructs protocol.

Availability:
`logtalk_load(loops(loader))`
Author: Paulo Moura
Version: 1:3:0
Date: 2017-03-20
Compilation flags:
`static`
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

## Public predicates

### `whiledo/2`

While `Condition` is true do `Action`.

Compilation flags:
`static`
Template:
`whiledo(Condition,Action)`
Meta-predicate template:
`whiledo(0,0)`
Mode and number of proofs:
`whiledo(+callable,@callable)` - `zero_or_one`

### `dowhile/2`

Do `Action` while `Condition` is true.

Compilation flags:
`static`
Template:
`dowhile(Action,Condition)`
Meta-predicate template:
`dowhile(0,0)`
Mode and number of proofs:
`dowhile(@callable,+callable)` - `zero_or_one`

### `foreach/3`

For each `Element` in `List` call `Goal`.

Compilation flags:
`static`
Template:
`foreach(Element,List,Goal)`
Meta-predicate template:
`foreach(*,*,0)`
Mode and number of proofs:
`foreach(@var,+list(term),@callable)` - `zero_or_one`

### `foreach/4`

For each `Element` in `List` at position `Index` call `Goal`. `Index` starts at 1.

Compilation flags:
`static`
Template:
`foreach(Element,Index,List,Goal)`
Meta-predicate template:
`foreach(*,*,*,0)`
Mode and number of proofs:
`foreach(@var,@var,+list(term),@callable)` - `zero_or_one`

### `forto/3`

Calls `Goal` counting up from `First` to `Last`. Increment is 1. For convenience, `First` and `Last` can be arithmetic expressions. Fails iff `Goal` fails.

Compilation flags:
`static`
Template:
`forto(First,Last,Goal)`
Meta-predicate template:
`forto(*,*,0)`
Mode and number of proofs:
`forto(+number,+number,@callable)` - `zero_or_one`

### `forto/4`

Calls `Goal` counting up from `First` to `Last` and binding `Count` to each successive value. Increment is 1. For convenience, `First` and `Last` can be arithmetic expressions. Fails iff `Goal` fails.

Compilation flags:
`static`
Template:
`forto(Count,First,Last,Goal)`
Meta-predicate template:
`forto(*,*,*,0)`
Mode and number of proofs:
`forto(@var,+number,+number,@callable)` - `zero_or_one`

### `forto/5`

Calls `Goal` counting up from `First` to `Last` and binding `Count` to each successive value. For convenience, `First`, `Last`, and `Increment` can be arithmetic expressions (uses `Increment` absolute value). Fails iff `Goal` fails.

Compilation flags:
`static`
Template:
`forto(Count,First,Last,Increment,Goal)`
Meta-predicate template:
`forto(*,*,*,*,0)`
Mode and number of proofs:
`forto(@var,+number,+number,+number,@callable)` - `zero_or_one`

### `fordownto/3`

Calls `Goal` counting down from `First` to `Last`. Decrement is 1. For convenience, `First` and `Last` can be arithmetic expressions. Fails iff `Goal` fails.

Compilation flags:
`static`
Template:
`fordownto(First,Last,Goal)`
Meta-predicate template:
`fordownto(*,*,0)`
Mode and number of proofs:
`fordownto(+number,+number,@callable)` - `zero_or_one`

### `fordownto/4`

Calls `Goal` counting down from `First` to `Last` and binding `Count` to each successive value. Decrement is 1. For convenience, `First` and `Last` can be arithmetic expressions. Fails iff `Goal` fails.

Compilation flags:
`static`
Template:
`fordownto(Count,First,Last,Goal)`
Meta-predicate template:
`fordownto(*,*,*,0)`
Mode and number of proofs:
`fordownto(@var,+number,+number,@callable)` - `zero_or_one`

### `fordownto/5`

Calls `Goal` counting down from `First` to `Last` and binding `Count` to each successive value. For convenience, `First`, `Last`, and `Decrement` can be arithmetic expressions (uses `Decrement` absolute value). Fails iff `Goal` fails.

Compilation flags:
`static`
Template:
`fordownto(Count,First,Last,Decrement,Goal)`
Meta-predicate template:
`fordownto(*,*,*,*,0)`
Mode and number of proofs:
`fordownto(@var,+number,+number,+number,@callable)` - `zero_or_one`

## Protected predicates

(none)

## Private predicates

(none)

## Operators

(none)

See also

loop