.. index:: single: loopp
.. _loopp/0:

.. rst-class:: right

**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)

.. contents::
   :local:
   :backlinks: top

Public predicates
-----------------

.. index:: whiledo/2
.. _loopp/0::whiledo/2:

``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``


------------

.. index:: dowhile/2
.. _loopp/0::dowhile/2:

``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``


------------

.. index:: foreach/3
.. _loopp/0::foreach/3:

``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``


------------

.. index:: foreach/4
.. _loopp/0::foreach/4:

``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``


------------

.. index:: forto/3
.. _loopp/0::forto/3:

``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``


------------

.. index:: forto/4
.. _loopp/0::forto/4:

``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``


------------

.. index:: forto/5
.. _loopp/0::forto/5:

``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``


------------

.. index:: fordownto/3
.. _loopp/0::fordownto/3:

``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``


------------

.. index:: fordownto/4
.. _loopp/0::fordownto/4:

``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``


------------

.. index:: fordownto/5
.. _loopp/0::fordownto/5:

``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)

.. seealso::

   :ref:`loop <loop/0>`

