@ciao-lang/ts-ciao-interface
Version:
Simple Ciao interface for node.
300 lines • 93.4 kB
HTML
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="theme-color" content="#273f79"/><link rel="stylesheet" href="lpdoc.css" type="text/css"/><script type="text/javascript" src="lpdoc.js"></script><title>Basic data types and properties — The Ciao System v1.22</title></head><body><div class="lpdoc-page fixleftbar"><a href="#" id="sidebar-toggle-button" class="lpdoc-navbutton"><span id="sidebar-button-arrow">☰</span></a><div id="sidebar" class="lpdoc-sidebar"><div style="height: 40px; margin-left: auto; margin-right: auto"><img src="ciao-logo_autofig.png" width=auto height=100%></div><div class="lpdoc-nav"><span class="lpdoc-on-right"><a class="lpdoc-navbutton" href="AssrtLang.html">↑</a><a class="lpdoc-navbutton" href="regtypes_doc.html">←</a><a class="lpdoc-navbutton" href="native_props.html">→</a><a class="lpdoc-navbutton" href="ciaosearch.html">🔍</a></span><span><a href="ciaofulltoc.html">TOC</a></span></div><hr></hr><ul class="lpdoc-itemize-sectpath"><li><a href="ciao.html">The Ciao System</a> »<br/> </li><li><a href="AssrtLang.html">PART III - Assertions and auto-documentation</a> »<br/> </li><li><a href=""><strong>Basic data types and properties</strong></a></li></ul><hr></hr><em>ON THIS PAGE</em><ul><li><a href="#Usage and interface">Usage and interface</a></li><li><a href="#Documentation on exports">Documentation on exports</a></li><li><a href="#Documentation on imports">Documentation on imports</a></li></ul></div><div class="lpdoc-main"><div id=""><h1>Basic data types and properties</h1><a class="lpdoc-idx-anchor" href="ciaosearch.html#basic_props"></a>
<strong>Author(s):</strong> <a class="lpdoc-idx-anchor" id="Daniel Cabeza" href="ciaosearch.html#Daniel Cabeza">Daniel Cabeza</a>, <a class="lpdoc-idx-anchor" id="Manuel Hermenegildo" href="ciaosearch.html#Manuel Hermenegildo">Manuel Hermenegildo</a>.<p>
<a class="lpdoc-idx-anchor" id="0" href="ciaosearch.html#properties, basic"></a> This library contains the set of basic properties used by the builtin predicates, and which constitute the basic data types and properties of the language. They are intented to be used as properties in assertions (for both runtime and compile time checking).<p>Note that most of those properties can be used directly from goals as type testing builtins, and they should be correct when terms are sufficiently instantiated. Calling with uninstantiated terms have undefined behaviour (failure or non termination, depending on the type). Please use the run-time checking facilities (<a class="lpdoc-idx-anchor" id="1" href="#inst/2"><tt>inst/2</tt></a> and <a class="lpdoc-idx-anchor" id="2" href="#compat/2"><tt>compat/2</tt></a>) to ensure well-defined behaviour. For low-level instantiation checks we encourage the use <a class="lpdoc-idx-anchor" id="3" href="term_typing.html"><tt>term_typing</tt></a> builtins.<br/><div id="Usage and interface"><h2>Usage and interface</h2><div class="lpdoc-cartouche"><ul><li><strong>Library usage:</strong><br/>This module is automatically imported by the <a class="lpdoc-idx-anchor" id="4" href="assertions_doc.html"><tt>assertions</tt></a> package. It can be imported explicitly with the <tt>:- use_module(engine(basic_props))</tt> directive.<li><strong>Exports:</strong><br/><ul class="lpdoc-itemize-minus"><li><em>Predicates:</em><br/><a class="lpdoc-idx-anchor" id="5" href="assertions_doc.html#check/1"><tt>check/1</tt></a>, <a class="lpdoc-idx-anchor" id="6" href="assertions_doc.html#trust/1"><tt>trust/1</tt></a>, <a class="lpdoc-idx-anchor" id="7" href="assertions_doc.html#true/1"><tt>true/1</tt></a>, <a class="lpdoc-idx-anchor" id="8" href="assertions_doc.html#false/1"><tt>false/1</tt></a>.
<li><em>Properties:</em><br/><a class="lpdoc-idx-anchor" id="9" href="#callable/1"><tt>callable/1</tt></a>, <a class="lpdoc-idx-anchor" id="10" href="#member/2"><tt>member/2</tt></a>, <a class="lpdoc-idx-anchor" id="11" href="#compat/2"><tt>compat/2</tt></a>, <a class="lpdoc-idx-anchor" id="12" href="#inst/2"><tt>inst/2</tt></a>, <a class="lpdoc-idx-anchor" id="13" href="#iso/1"><tt>iso/1</tt></a>, <a class="lpdoc-idx-anchor" id="14" href="#deprecated/1"><tt>deprecated/1</tt></a>, <a class="lpdoc-idx-anchor" id="15" href="#srcloc/4"><tt>srcloc/4</tt></a>, <a class="lpdoc-idx-anchor" id="16" href="#example/1"><tt>example/1</tt></a>, <a class="lpdoc-idx-anchor" id="17" href="#not_further_inst/2"><tt>not_further_inst/2</tt></a>, <a class="lpdoc-idx-anchor" id="18" href="#sideff/2"><tt>sideff/2</tt></a>, <a class="lpdoc-idx-anchor" id="19" href="regtypes_doc.html#regtype/1"><tt>regtype/1</tt></a>, <a class="lpdoc-idx-anchor" id="20" href="#native/1"><tt>native/1</tt></a>, <a class="lpdoc-idx-anchor" id="21" href="#native/2"><tt>native/2</tt></a>, <a class="lpdoc-idx-anchor" id="22" href="#rtcheck/1"><tt>rtcheck/1</tt></a>, <a class="lpdoc-idx-anchor" id="23" href="#rtcheck/2"><tt>rtcheck/2</tt></a>, <a class="lpdoc-idx-anchor" id="24" href="#no_rtcheck/1"><tt>no_rtcheck/1</tt></a>, <a class="lpdoc-idx-anchor" id="25" href="#eval/1"><tt>eval/1</tt></a>, <a class="lpdoc-idx-anchor" id="26" href="#equiv/2"><tt>equiv/2</tt></a>, <a class="lpdoc-idx-anchor" id="27" href="#bind_ins/1"><tt>bind_ins/1</tt></a>, <a class="lpdoc-idx-anchor" id="28" href="#error_free/1"><tt>error_free/1</tt></a>, <a class="lpdoc-idx-anchor" id="29" href="#memo/1"><tt>memo/1</tt></a>, <a class="lpdoc-idx-anchor" id="30" href="#filter/2"><tt>filter/2</tt></a>, <a class="lpdoc-idx-anchor" id="31" href="#pe_type/1"><tt>pe_type/1</tt></a>.
<li><em>Regular Types:</em><br/><a class="lpdoc-idx-anchor" id="32" href="#term/1"><tt>term/1</tt></a>, <a class="lpdoc-idx-anchor" id="33" href="#int/1"><tt>int/1</tt></a>, <a class="lpdoc-idx-anchor" id="34" href="#nnegint/1"><tt>nnegint/1</tt></a>, <a class="lpdoc-idx-anchor" id="35" href="#flt/1"><tt>flt/1</tt></a>, <a class="lpdoc-idx-anchor" id="36" href="#num/1"><tt>num/1</tt></a>, <a class="lpdoc-idx-anchor" id="37" href="#atm/1"><tt>atm/1</tt></a>, <a class="lpdoc-idx-anchor" id="38" href="#struct/1"><tt>struct/1</tt></a>, <a class="lpdoc-idx-anchor" id="39" href="#gnd/1"><tt>gnd/1</tt></a>, <a class="lpdoc-idx-anchor" id="40" href="#gndstr/1"><tt>gndstr/1</tt></a>, <a class="lpdoc-idx-anchor" id="41" href="#constant/1"><tt>constant/1</tt></a>, <a class="lpdoc-idx-anchor" id="42" href="#cgoal/1"><tt>cgoal/1</tt></a>, <a class="lpdoc-idx-anchor" id="43" href="#internal_module_id/1"><tt>internal_module_id/1</tt></a>, <a class="lpdoc-idx-anchor" id="44" href="#operator_specifier/1"><tt>operator_specifier/1</tt></a>, <a class="lpdoc-idx-anchor" id="45" href="#list/1"><tt>list/1</tt></a>, <a class="lpdoc-idx-anchor" id="46" href="#list/2"><tt>list/2</tt></a>, <a class="lpdoc-idx-anchor" id="47" href="#nlist/2"><tt>nlist/2</tt></a>, <a class="lpdoc-idx-anchor" id="48" href="#sequence/2"><tt>sequence/2</tt></a>, <a class="lpdoc-idx-anchor" id="49" href="#sequence_or_list/2"><tt>sequence_or_list/2</tt></a>, <a class="lpdoc-idx-anchor" id="50" href="#character_code/1"><tt>character_code/1</tt></a>, <a class="lpdoc-idx-anchor" id="51" href="#string/1"><tt>string/1</tt></a>, <a class="lpdoc-idx-anchor" id="52" href="#bytelist/1"><tt>bytelist/1</tt></a>, <a class="lpdoc-idx-anchor" id="53" href="#predname/1"><tt>predname/1</tt></a>, <a class="lpdoc-idx-anchor" id="54" href="#atm_or_atm_list/1"><tt>atm_or_atm_list/1</tt></a>, <a class="lpdoc-idx-anchor" id="55" href="#flag_values/1"><tt>flag_values/1</tt></a>.
</ul></ul></div></div><div id="Documentation on exports"><h2>Documentation on exports</h2><div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="term/1" href="ciaosearch.html#term/1">term/1</a></div><div class="lpdoc-deftext">The most general type (includes all possible terms).<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>term(X)</tt>
</span><p><span class="lpdoc-var">X</span> is any term.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="56" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>term(X)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="57" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">term(X)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>term(X)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="58" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">term(X)</span> is evaluable at compile-time.
</span>
</ul><span class="lpdoc-usage-decl"><tt>term(X)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="59" href="#equiv/2"><tt>basic_props:equiv/2</tt></a>)</span><span><span class="lpdoc-var">term(X)</span> is equivalent to <span class="lpdoc-var">true</span>.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="int/1" href="ciaosearch.html#int/1">int/1</a></div><div class="lpdoc-deftext">The type of integers. The range of integers is <tt>[-2^2147483616, 2^2147483616)</tt>. Thus for all practical purposes, the range of integers can be considered infinite.<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>int(T)</tt>
</span><p><span class="lpdoc-var">T</span> is an integer.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="60" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>int(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="61" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">int(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>int(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="62" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="63" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">int(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="64" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">int(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>int(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="65" href="#int/1"><tt>basic_props:int/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is an integer.
</span>
</ul><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="66" href="ciaosearch.html#test_type/2"><tt>native_props:test_type/2</tt></a>)</span><span>Indicates the type of test that a predicate performs. Required by the nonfailure analyisis.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="nnegint/1" href="ciaosearch.html#nnegint/1">nnegint/1</a></div><div class="lpdoc-deftext">The type of non-negative integers, i.e., natural numbers.<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>nnegint(T)</tt>
</span><p><span class="lpdoc-var">T</span> is a non-negative integer.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="67" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>nnegint(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="68" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">nnegint(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>nnegint(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="69" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="70" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">nnegint(T)</span> is evaluable at compile-time.
</span>
</ul><span class="lpdoc-usage-decl"><tt>nnegint(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="71" href="#nnegint/1"><tt>basic_props:nnegint/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is a non-negative integer.
</span>
</ul><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="72" href="ciaosearch.html#test_type/2"><tt>native_props:test_type/2</tt></a>)</span><span>Indicates the type of test that a predicate performs. Required by the nonfailure analyisis.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="flt/1" href="ciaosearch.html#flt/1">flt/1</a></div><div class="lpdoc-deftext">The type of floating-point numbers. The range of floats is the one provided by the C <tt>double</tt> type, typically <tt>[4.9e-324, 1.8e+308]</tt> (plus or minus). There are also three special values: Infinity, either positive or negative, represented as <tt>1.0e1000</tt> and <tt>-1.0e1000</tt>; and Not-a-number, which arises as the result of indeterminate operations, represented as <tt>0.Nan</tt><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>flt(T)</tt>
</span><p><span class="lpdoc-var">T</span> is a float.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="73" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>flt(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="74" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">flt(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>flt(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="75" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="76" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">flt(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="77" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">flt(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>flt(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="78" href="#flt/1"><tt>basic_props:flt/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is a float.
</span>
</ul><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="79" href="ciaosearch.html#test_type/2"><tt>native_props:test_type/2</tt></a>)</span><span>Indicates the type of test that a predicate performs. Required by the nonfailure analyisis.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="num/1" href="ciaosearch.html#num/1">num/1</a></div><div class="lpdoc-deftext">The type of numbers, that is, integer or floating-point.<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>num(T)</tt>
</span><p><span class="lpdoc-var">T</span> is a number.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="80" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>num(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="81" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">num(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="82" href="#bind_ins/1"><tt>basic_props:bind_ins/1</tt></a>)</span><span><span class="lpdoc-var">num(T)</span> is binding insensitive.
</span>
</ul><span class="lpdoc-usage-decl"><tt>num(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="83" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="84" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">num(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="85" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">num(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>num(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="86" href="#num/1"><tt>basic_props:num/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is a number.
</span>
</ul><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="87" href="ciaosearch.html#test_type/2"><tt>native_props:test_type/2</tt></a>)</span><span>Indicates the type of test that a predicate performs. Required by the nonfailure analyisis.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="atm/1" href="ciaosearch.html#atm/1">atm/1</a></div><div class="lpdoc-deftext">The type of atoms, or non-numeric constants. The size of atoms is unbound.<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>atm(T)</tt>
</span><p><span class="lpdoc-var">T</span> is an atom.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="88" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>atm(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="89" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">atm(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>atm(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="90" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="91" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">atm(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="92" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">atm(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>atm(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="93" href="#atm/1"><tt>basic_props:atm/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is an atom.
</span>
</ul><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="94" href="ciaosearch.html#test_type/2"><tt>native_props:test_type/2</tt></a>)</span><span>Indicates the type of test that a predicate performs. Required by the nonfailure analyisis.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="struct/1" href="ciaosearch.html#struct/1">struct/1</a></div><div class="lpdoc-deftext">The type of compound terms, or terms with non-zeroary functors. By now there is a limit of 255 arguments.<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>struct(T)</tt>
</span><p><span class="lpdoc-var">T</span> is a compound term.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="95" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>struct(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="96" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">struct(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>struct(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="97" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="98" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">struct(T)</span> is evaluable at compile-time.
</span>
</ul><span class="lpdoc-usage-decl"><tt>struct(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="99" href="#struct/1"><tt>basic_props:struct/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is a compound term.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="gnd/1" href="ciaosearch.html#gnd/1">gnd/1</a></div><div class="lpdoc-deftext">The type of all terms without variables.<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>gnd(T)</tt>
</span><p><span class="lpdoc-var">T</span> is ground.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="100" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>gnd(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="101" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">gnd(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>gnd(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="102" href="term_typing.html#ground/1"><tt>term_typing:ground/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently ground (it contains no variables).
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="103" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">gnd(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="104" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">gnd(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>gnd(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="105" href="#gnd/1"><tt>basic_props:gnd/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is ground.
</span>
</ul><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="106" href="ciaosearch.html#test_type/2"><tt>native_props:test_type/2</tt></a>)</span><span>Indicates the type of test that a predicate performs. Required by the nonfailure analyisis.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="gndstr/1" href="ciaosearch.html#gndstr/1">gndstr/1</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>gndstr(T)</tt>
</span><p><span class="lpdoc-var">T</span> is a ground compound term.</p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="107" href="#native/1"><tt>basic_props:native/1</tt></a>)</span><span>This predicate is understood natively by CiaoPP.
</span>
</ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>gndstr(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="108" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">gndstr(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>gndstr(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="109" href="term_typing.html#ground/1"><tt>term_typing:ground/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently ground (it contains no variables).
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="110" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">gndstr(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="111" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">gndstr(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>gndstr(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="112" href="#gndstr/1"><tt>basic_props:gndstr/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is a ground compound term.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="constant/1" href="ciaosearch.html#constant/1">constant/1</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>constant(T)</tt>
</span><p><span class="lpdoc-var">T</span> is an atomic term (an atom or a number).</p><ul class="lpdoc-itemize-minus"></ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>constant(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="113" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">constant(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>constant(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="114" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="115" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">constant(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="116" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">constant(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>constant(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="117" href="#constant/1"><tt>basic_props:constant/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is an atomic term (an atom or a number).
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="cgoal/1" href="ciaosearch.html#cgoal/1">cgoal/1</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>cgoal(T)</tt>
</span><p><span class="lpdoc-var">T</span> is a term which represents a goal, i.e., an atom or a structure.</p><ul class="lpdoc-itemize-minus"></ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>cgoal(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="118" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">cgoal(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>cgoal(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="119" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="120" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">cgoal(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="121" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">cgoal(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>cgoal(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="122" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PROPERTY</span><a class="lpdoc-idx-anchor" id="callable/1" href="ciaosearch.html#callable/1">callable/1</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>callable(T)</tt>
</span><p><span class="lpdoc-var">T</span> is instantiated with an atom or a structure (also known as callable).</p><ul class="lpdoc-itemize-minus"></ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>callable(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="123" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">callable(T)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>callable(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="124" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="125" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">callable(T)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="126" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">callable(T)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>callable(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="127" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently a term which is not a free variable.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="internal_module_id/1" href="ciaosearch.html#internal_module_id/1">internal_module_id/1</a></div><div class="lpdoc-deftext">For a user file it is a term user/1 with an argument different for each user file, for other modules is just the name of the module (as an atom).<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>internal_module_id(M)</tt>
</span><p><span class="lpdoc-var">M</span> is an internal module identifier</p><ul class="lpdoc-itemize-minus"></ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="operator_specifier/1" href="ciaosearch.html#operator_specifier/1">operator_specifier/1</a></div><div class="lpdoc-deftext">The type and associativity of an operator is described by the following mnemonic atoms:<p><dl> <p><dt><tt>xfx</tt><dd> Infix, non-associative: it is a requirement that both of the two subexpressions which are the arguments of the operator must be of <em>lower</em> precedence than the operator itself.<p><dt><tt>xfy</tt><dd> Infix, right-associative: only the first (left-hand) subexpression must be of lower precedence; the right-hand subexpression can be of the <em>same</em> precedence as the main operator.<p><dt><tt>yfx</tt><dd> Infix, left-associative: same as above, but the other way around.<p><dt><tt>fx</tt><dd> Prefix, non-associative: the subexpression must be of <em>lower</em> precedence than the operator.<p><dt><tt>fy</tt><dd> Prefix, associative: the subexpression can be of the <em>same</em> precedence as the operator.<p><dt><tt>xf</tt><dd> Postfix, non-associative: the subexpression must be of <em>lower</em> precedence than the operator.<p><dt><tt>yf</tt><dd> Postfix, associative: the subexpression can be of the <em>same</em> precedence as the operator.<p></dl> <p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>operator_specifier(X)</tt>
</span><p><span class="lpdoc-var">X</span> specifies the type and associativity of an operator.</p><ul class="lpdoc-itemize-minus"></ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>operator_specifier(X)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="128" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">operator_specifier(X)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>operator_specifier(X)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="129" href="term_typing.html#nonvar/1"><tt>term_typing:nonvar/1</tt></a>)</span><span><span class="lpdoc-var">X</span> is currently a term which is not a free variable.
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="130" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">operator_specifier(X)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="131" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">operator_specifier(X)</span> are deterministic.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="132" href="native_props_cardinality_doc.html#relations/2"><tt>native_props:relations/2</tt></a>)</span><span>Goal <span class="lpdoc-var">operator_specifier(X)</span> produces <span class="lpdoc-var">7</span> solutions.
</span>
</ul><span class="lpdoc-usage-decl"><tt>operator_specifier(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="133" href="#operator_specifier/1"><tt>basic_props:operator_specifier/1</tt></a>)</span><span><span class="lpdoc-var">T</span> specifies the type and associativity of an operator.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="list/1" href="ciaosearch.html#list/1">list/1</a></div><div class="lpdoc-deftext">A list is formed with successive applications of the functor <tt>'.'/2</tt>, and its end is the atom <tt>[]</tt>. Defined as <pre class="lpdoc-codeblock">list([]).
list([_1|L]) :-
list(L).
</pre><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>list(L)</tt>
</span><p><span class="lpdoc-var">L</span> is a list.</p><ul class="lpdoc-itemize-minus"></ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>list(L)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="134" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">list(L)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>list(L)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="135" href="term_typing.html#ground/1"><tt>term_typing:ground/1</tt></a>)</span><span><span class="lpdoc-var">L</span> is currently ground (it contains no variables).
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="136" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">list(L)</span> is evaluable at compile-time.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="137" href="native_props_nfdet_doc.html#is_det/1"><tt>native_props:is_det/1</tt></a>)</span><span>All calls of the form <span class="lpdoc-var">list(L)</span> are deterministic.
</span>
</ul><span class="lpdoc-usage-decl"><tt>list(T)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="138" href="#list/1"><tt>basic_props:list/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is a list.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="list/2" href="ciaosearch.html#list/2">list/2</a></div><div class="lpdoc-deftext"><span class="lpdoc-usage-decl"><tt>list(T,L)</tt>
</span><p><span class="lpdoc-var">L</span> is a list, and for all its elements, <span class="lpdoc-var">T</span> holds.<p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>list(T,L)</tt>
</span><p><span class="lpdoc-var">L</span> is a list of <span class="lpdoc-var">T</span>s.</p><ul class="lpdoc-itemize-minus"></ul>
<em>Meta-predicate</em> with arguments: <tt>list(pred(1),?)</tt>.<br/>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>list(T,L)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="139" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">list(T,L)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>list(T,L)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="140" href="term_typing.html#ground/1"><tt>term_typing:ground/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently ground (it contains no variables).
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="141" href="term_typing.html#ground/1"><tt>term_typing:ground/1</tt></a>)</span><span><span class="lpdoc-var">L</span> is currently ground (it contains no variables).
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="142" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">list(T,L)</span> is evaluable at compile-time.
</span>
</ul><span class="lpdoc-usage-decl"><tt>list(T,X)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="143" href="#list/1"><tt>basic_props:list/1</tt></a>)</span><span><span class="lpdoc-var">X</span> is a list.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">REGTYPE</span><a class="lpdoc-idx-anchor" id="nlist/2" href="ciaosearch.html#nlist/2">nlist/2</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>nlist(T,L)</tt>
</span><p><span class="lpdoc-var">L</span> is <span class="lpdoc-var">T</span> or a nested list of <span class="lpdoc-var">T</span>s. Note that if <span class="lpdoc-var">T</span> is term, this type is equivalent to term, this fact explains why we do not have an <a class="lpdoc-idx-anchor" id="144" href="ciaosearch.html#nlist/1"><tt>nlist/1</tt></a> type.</p><ul class="lpdoc-itemize-minus"></ul>
<em>Meta-predicate</em> with arguments: <tt>nlist(pred(1),?)</tt>.<br/>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>nlist(T,L)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="145" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">nlist(T,L)</span> is side-effect <span class="lpdoc-var">free</span>.
</span>
</ul><span class="lpdoc-usage-decl"><tt>nlist(T,L)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>If the following properties hold at call time:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="146" href="term_typing.html#ground/1"><tt>term_typing:ground/1</tt></a>)</span><span><span class="lpdoc-var">T</span> is currently ground (it contains no variables).
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="147" href="term_typing.html#ground/1"><tt>term_typing:ground/1</tt></a>)</span><span><span class="lpdoc-var">L</span> is currently ground (it contains no variables).
</span>
<br/><em>then the following properties hold globally:</em>
<br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="148" href="#eval/1"><tt>basic_props:eval/1</tt></a>)</span><span><span class="lpdoc-var">nlist(T,L)</span> is evaluable at compile-time.
</span>
</ul><span class="lpdoc-usage-decl"><tt>nlist(T,X)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold upon exit:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="149" href="#term/1"><tt>basic_props:term/1</tt></a>)</span><span><span class="lpdoc-var">X</span> is any term.
</span>
</ul></div></div><p>
<div><div class="lpdoc-defname"><span class="lpdoc-predtag">PROPERTY</span><a class="lpdoc-idx-anchor" id="member/2" href="ciaosearch.html#member/2">member/2</a></div><div class="lpdoc-deftext"><p><span class="lpdoc-usage-header">Usage:</span><span class="lpdoc-usage-decl"><tt>member(X,L)</tt>
</span><p><span class="lpdoc-var">X</span> is an element of <span class="lpdoc-var">L</span>.</p><ul class="lpdoc-itemize-minus"></ul>
<strong>Other properties:</strong> <br/><span class="lpdoc-usage-decl"><tt>member(X,L)</tt>
</span><p></p><ul class="lpdoc-itemize-minus"><li><em>The following properties hold globally:</em><br/><span class="lpdoc-on-right"> (<a class="lpdoc-idx-anchor" id="150" href="#sideff/2"><tt>basic_props:sideff/2</tt></a>)</span><span><span class="lpdoc-var">member(X,L)</span> is side-effect <span class="lpdoc-var">free</span>.
</span><br/><span class="lpdoc-on-right"> (<a class="lpdoc