.. index:: termp
.. _termp/0:

.. rst-class:: right

**protocol**

``termp``
=========

Term utility predicates protocol.

| **Author:** Paulo Moura
| **Version:** 1:34:0
| **Date:** 2022-02-03

| **Compilation flags:**
|    ``static``


| **Extends:**
|    ``public`` :ref:`comparingp <comparingp/0>`

| **Remarks:**
|    (none)

| **Inherited public predicates:**
|     :ref:`comparingp/0::(<)/2`  :ref:`comparingp/0::(=:=)/2`  :ref:`comparingp/0::(=<)/2`  :ref:`comparingp/0::(=\=)/2`  :ref:`comparingp/0::(>)/2`  :ref:`comparingp/0::(>=)/2`  

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

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

.. index:: depth/2
.. _termp/0::depth/2:

``depth/2``
^^^^^^^^^^^

True if the depth of ``Term`` is ``Depth``. The depth of atomic terms is zero; the depth of a compound term is one plus the maximum depth of its sub-terms.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``depth(Term,Depth)``
| **Mode and number of proofs:**
|    ``depth(@term,?integer)`` - ``zero_or_one``


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

.. index:: ground/1
.. _termp/0::ground/1:

``ground/1``
^^^^^^^^^^^^

True if the argument is ground. Deprecated. Use the ``ground/1`` standard predicate instead.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``ground(Term)``
| **Mode and number of proofs:**
|    ``ground(@term)`` - ``zero_or_one``


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

.. index:: new/1
.. _termp/0::new/1:

``new/1``
^^^^^^^^^

Creates a new term instance (if meaningful).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``new(Term)``
| **Mode and number of proofs:**
|    ``new(-nonvar)`` - ``zero_or_one``


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

.. index:: occurs/2
.. _termp/0::occurs/2:

``occurs/2``
^^^^^^^^^^^^

True if the variable occurs in the term.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``occurs(Variable,Term)``
| **Mode and number of proofs:**
|    ``occurs(@var,@term)`` - ``zero_or_one``


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

.. index:: subsumes/2
.. _termp/0::subsumes/2:

``subsumes/2``
^^^^^^^^^^^^^^

The first term subsumes the second term. Deprecated. Use the ``subsumes_term/2`` standard predicate instead.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``subsumes(General,Specific)``
| **Mode and number of proofs:**
|    ``subsumes(?term,@term)`` - ``zero_or_one``


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

.. index:: subterm/2
.. _termp/0::subterm/2:

``subterm/2``
^^^^^^^^^^^^^

The first term is a subterm of the second term.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``subterm(Subterm,Term)``
| **Mode and number of proofs:**
|    ``subterm(?term,+term)`` - ``zero_or_more``


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

.. index:: valid/1
.. _termp/0::valid/1:

``valid/1``
^^^^^^^^^^^

Term is valid.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``valid(Term)``
| **Mode and number of proofs:**
|    ``valid(@nonvar)`` - ``zero_or_one``


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

.. index:: check/1
.. _termp/0::check/1:

``check/1``
^^^^^^^^^^^

Checks if a term is valid. Throws an exception if the term is not valid.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``check(Term)``
| **Mode and number of proofs:**
|    ``check(@nonvar)`` - ``one``


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

.. index:: variant/2
.. _termp/0::variant/2:

``variant/2``
^^^^^^^^^^^^^

Each term is a variant of the other (i.e. they are structurally equivalent).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``variant(Term1,Term2)``
| **Mode and number of proofs:**
|    ``variant(@term,@term)`` - ``zero_or_one``


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

.. index:: variables/2
.. _termp/0::variables/2:

``variables/2``
^^^^^^^^^^^^^^^

Returns a list of all term variables (ordered as found when doing a depth-first, left-to-right traversal of ``Term``).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``variables(Term,List)``
| **Mode and number of proofs:**
|    ``variables(@term,-list)`` - ``one``


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

.. index:: singletons/2
.. _termp/0::singletons/2:

``singletons/2``
^^^^^^^^^^^^^^^^

Returns a list of all term singleton variables (ordered as found when doing a depth-first, left-to-right traversal of ``Term``).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``singletons(Term,Singletons)``
| **Mode and number of proofs:**
|    ``singletons(@term,-list)`` - ``one``


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

.. index:: numbervars/3
.. _termp/0::numbervars/3:

``numbervars/3``
^^^^^^^^^^^^^^^^

Grounds a term by replacing all variables with ``'$VAR'(N)`` terms with ``N`` starting at ``From``. The ``Next`` argument is unified with the next value for ``N`` after binding all variables.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``numbervars(Term,From,Next)``
| **Mode and number of proofs:**
|    ``numbervars(?term,+integer,?integer)`` - ``zero_or_one``


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

.. index:: numbervars/1
.. _termp/0::numbervars/1:

``numbervars/1``
^^^^^^^^^^^^^^^^

Grounds a term by replacing all variables with ``'$VAR'(N)`` terms with ``N`` starting at ``0``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``numbervars(Term)``
| **Mode and number of proofs:**
|    ``numbervars(?term)`` - ``zero_or_one``


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

.. index:: varnumbers/3
.. _termp/0::varnumbers/3:

``varnumbers/3``
^^^^^^^^^^^^^^^^

Replaces all ``'$VAR'(N)`` sub-terms in a term with fresh variables for all values of ``N`` grater or equal to ``From``. Variables in ``Term`` are shared with ``Copy``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``varnumbers(Term,From,Copy)``
| **Mode and number of proofs:**
|    ``varnumbers(@term,+integer,?term)`` - ``zero_or_one``


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

.. index:: varnumbers/2
.. _termp/0::varnumbers/2:

``varnumbers/2``
^^^^^^^^^^^^^^^^

Replaces all ``'$VAR'(N)`` sub-terms in a term with fresh variables for all values of ``N`` grater or equal to ``0``. Variables in ``Term`` are shared with ``Copy``.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``varnumbers(Term,Copy)``
| **Mode and number of proofs:**
|    ``varnumbers(@term,?term)`` - ``zero_or_one``


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

Protected predicates
--------------------

(no local declarations; see entity ancestors if any)

Private predicates
------------------

(no local declarations; see entity ancestors if any)

Operators
---------

(none)

.. seealso::

   :ref:`term <term/0>`

