Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > by-pkgid > 2fc07611b08d4a735fd34d5eb60d8e16 > files > 2238

ciao-1.10p8-3mdv2010.0.i586.rpm

<HTML>
<HEAD>
<!-- Created by texi2html 1.56k + clip patches and <A href="http://www.clip.dia.fi.upm.es/Software">lpdoc</A> from ciao.texi on 28 January 2007 -->

<LINK rel="stylesheet" href="ciao.css" type="text/css">
<TITLE>The Ciao Prolog System               - Types and properties related to assertions</TITLE>
</HEAD>
<BODY> 
Go to the <A HREF="ciao_1.html">first</A>, <A HREF="ciao_59.html">previous</A>, <A HREF="ciao_61.html">next</A>, <A HREF="ciao_241.html">last</A> section, <A HREF="ciao_toc.html">table of contents</A>.
<P><HR><P>


<H1><A NAME="SEC272" HREF="ciao_toc.html#TOC272">Types and properties related to assertions</A></H1>
<P>
<A NAME="IDX3834"></A>


<P>
<STRONG>Author(s):</STRONG> Manuel Hermenegildo.


<P>
<STRONG>Version:</STRONG> 1.10#7 (2006/4/26, 19:22:13 CEST)


<P>
<STRONG>Version of last change:</STRONG> 1.7#156 (2001/11/24, 13:23:30 CET)


<P>
This module is part of the 
<A NAME="IDX3835"></A>
<CODE>assertions</CODE> library. It provides the formal definition of the syntax of several forms of assertions and describes their meaning. It does so by defining types and properties related to the assertions themselves. The text describes, for example, the overall fields which are admissible in the bodies of assertions, where properties can be used inside these bodies, how to combine properties for a given predicate argument (e.g., conjunctions) , etc. and provides some examples.



<UL>
<LI><A HREF="ciao_60.html#SEC273">Usage and interface (assertions_props)</A>
<LI><A HREF="ciao_60.html#SEC274">Documentation on exports (assertions_props)</A>
</UL>



<H2><A NAME="SEC273" HREF="ciao_toc.html#TOC273">Usage and interface (<CODE>assertions_props</CODE>)</A></H2>

<div class="cartouche">

<UL>

<LI><STRONG>Library usage:</STRONG>

<CODE>:- use_module(library(assertions_props)).</CODE>

<LI><STRONG>Exports:</STRONG>


<UL>

<LI><EM>Properties:</EM>

<A NAME="IDX3836"></A>
<CODE>head_pattern/1</CODE>, 
<A NAME="IDX3837"></A>
<CODE>nabody/1</CODE>, 
<A NAME="IDX3838"></A>
<CODE>docstring/1</CODE>.

<LI><EM>Regular Types:</EM>

<A NAME="IDX3839"></A>
<CODE>assrt_body/1</CODE>, 
<A NAME="IDX3840"></A>
<CODE>complex_arg_property/1</CODE>, 
<A NAME="IDX3841"></A>
<CODE>property_conjunction/1</CODE>, 
<A NAME="IDX3842"></A>
<CODE>property_starterm/1</CODE>, 
<A NAME="IDX3843"></A>
<CODE>complex_goal_property/1</CODE>, 
<A NAME="IDX3844"></A>
<CODE>dictionary/1</CODE>, 
<A NAME="IDX3845"></A>
<CODE>c_assrt_body/1</CODE>, 
<A NAME="IDX3846"></A>
<CODE>s_assrt_body/1</CODE>, 
<A NAME="IDX3847"></A>
<CODE>g_assrt_body/1</CODE>, 
<A NAME="IDX3848"></A>
<CODE>assrt_status/1</CODE>, 
<A NAME="IDX3849"></A>
<CODE>assrt_type/1</CODE>, 
<A NAME="IDX3850"></A>
<CODE>predfunctor/1</CODE>, 
<A NAME="IDX3851"></A>
<CODE>propfunctor/1</CODE>.

</UL>

<LI><STRONG>Other modules used:</STRONG>


<UL>

<LI><EM>System library modules:</EM>

<A NAME="IDX3852"></A>
<CODE>dcg_expansion</CODE>.

</UL>

</UL>

</div class="cartouche">



<H2><A NAME="SEC274" HREF="ciao_toc.html#TOC274">Documentation on exports (<CODE>assertions_props</CODE>)</A></H2>
<P>
<A NAME="IDX3853"></A>
<A NAME="IDX3854"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>assrt_body/1:</B>
<DD><A NAME="IDX3855"></A>


<P>
 
<A NAME="IDX3856"></A>
<A NAME="IDX3857"></A>
This predicate defines the different types of syntax admissible in the bodies of 
<A NAME="IDX3858"></A>
<CODE>pred/1</CODE>, 
<A NAME="IDX3859"></A>
<CODE>decl/1</CODE>, etc. assertions. Such a body is of the form: 



<PRE>
      Pr [:: DP] [: CP] [=&#62; AP] [+ GP] [# CO]
</PRE>

<P>
where (fields between [...] are optional): 



<UL>

<LI><CODE>Pr</CODE> is a

<A NAME="IDX3860"></A>
head pattern (
<A NAME="IDX3861"></A>
<CODE>head_pattern/1</CODE>) which describes the predicate or property and possibly gives some implicit call/answer information. 

<LI><CODE>DP</CODE> is a (possibly empty)

<A NAME="IDX3862"></A>
complex argument property (
<A NAME="IDX3863"></A>
<CODE>complex_arg_property/1</CODE>) which expresses properties which are 
<A NAME="IDX3864"></A>
compatible with the predicate, i.e., instantiations made by the predicate are <EM>compatible</EM> with the properties in the sense that applying the property at any point to would not make it fail. 

<LI><CODE>CP</CODE> is a (possibly empty)

<A NAME="IDX3865"></A>
complex argument property (
<A NAME="IDX3866"></A>
<CODE>complex_arg_property/1</CODE>) which applies to the <EM>calls</EM> to the predicate. 

<LI><CODE>AP</CODE> is a (possibly empty)

<A NAME="IDX3867"></A>
complex argument property (
<A NAME="IDX3868"></A>
<CODE>complex_arg_property/1</CODE>) which applies to the <EM>answers</EM> to the predicate (if the predicate succeeds). These only apply if the (possibly empty) properties given for calls in the assertion hold. 

<LI><CODE>GP</CODE> is a (possibly empty)

<A NAME="IDX3869"></A>
complex goal property (
<A NAME="IDX3870"></A>
<CODE>complex_goal_property/1</CODE>) which applies to the <EM>whole execution</EM> of a call to the predicate. These only apply if the (possibly empty) properties given for calls in the assertion hold. 

<LI><CODE>CO</CODE> is a

<A NAME="IDX3871"></A>
comment string (
<A NAME="IDX3872"></A>
<CODE>docstring/1</CODE>). This comment only applies if the (possibly empty) properties given for calls in the assertion hold. The usual formatting commands that are applicable in comment strings can be used (see 
<A NAME="IDX3873"></A>
<CODE>stringcommand/1</CODE>). 

See the 
<A NAME="IDX3874"></A>
<CODE>lpdoc</CODE> manual for documentation on assertion comments. 

</UL>

<P>
<STRONG>Usage:</STRONG> <CODE>assrt_body(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is an assertion body.

</UL>

</DL>

<P>
<A NAME="IDX3875"></A>
<A NAME="IDX3876"></A>
<DL>
<DT><span class="define">PROPERTY:</span> <B>head_pattern/1:</B>
<DD><A NAME="IDX3877"></A>


<P>
A 
<A NAME="IDX3878"></A>
head pattern can be a predicate name (functor/arity) (
<A NAME="IDX3879"></A>
<CODE>predname/1</CODE>) or a term. Thus, both <CODE>p/3</CODE> and <CODE>p(A,B,C)</CODE> are valid head patterns. In the case in which the head pattern is a term, each argument of such a term can be: 



<UL>

<LI>A variable. This is useful in order to be able to refer to the corresponding argument positions by name within properties and in comments. Thus, <CODE>p(Input,Parameter,Output)</CODE> is a valid head pattern.

<LI>A ground term. In this case this term determines a property of the corresponding argument. The actual property referred to is that given by the term but with one more argument added at the beginning, which is a new variable which, in a rewriting of the head pattern, appears at the argument position occupied by the term. Unless otherwise stated (see below), the property built this way is understood to hold for both calls and answers. For example, the head pattern <CODE>p(Input,list(integer),Output)</CODE> is valid and equivalent for example to having the head pattern <CODE>p(Input,A,Output)</CODE> and stating that the property <CODE>list(A,integer)</CODE> holds for the calls and successes of the predicate.

<LI>Finally, it can also be a variable or a ground term, as above, but preceded by a "

<A NAME="IDX3880"></A>
mode." This mode determines in a compact way certain call or answer properties. For example, the head pattern <CODE>p(Input,+list(integer),Output)</CODE> is valid, as long as 
<A NAME="IDX3881"></A>
<CODE>+/1</CODE> is declared as a mode. 

Acceptable modes 
<A NAME="IDX3882"></A>
<A NAME="IDX3883"></A>
are documented in 
<A NAME="IDX3884"></A>
<CODE>library(modes)</CODE>. User defined modes are documented in 
<A NAME="IDX3885"></A>
<CODE>modedef/1</CODE>. 

</UL>

<P>
<STRONG>Usage:</STRONG> <CODE>head_pattern(Pr)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>Pr</CODE> is a head pattern.

</UL>

</DL>

<P>
<A NAME="IDX3886"></A>
<A NAME="IDX3887"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>complex_arg_property/1:</B>
<DD><A NAME="IDX3888"></A>


<P>
<CODE>complex_arg_property(Props)</CODE>


<P>
<CODE>Props</CODE> is a (possibly empty) 
<A NAME="IDX3889"></A>
complex argument property. Such properties can appear in two formats, which are defined by 
<A NAME="IDX3890"></A>
<CODE>property_conjunction/1</CODE> and 
<A NAME="IDX3891"></A>
<CODE>property_starterm/1</CODE> respectively. The two formats can be mixed provided they are not in the same field of an assertion. I.e., the following is a valid assertion: 


<P>
<CODE>:- pred foo(X,Y) : nonvar * var =&#62; (ground(X),ground(Y)).</CODE> 


<P>
<STRONG>Usage:</STRONG> <CODE>complex_arg_property(Props)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>Props</CODE> is a (possibly empty) complex argument property

</UL>

</DL>

<P>
<A NAME="IDX3892"></A>
<A NAME="IDX3893"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>property_conjunction/1:</B>
<DD><A NAME="IDX3894"></A>


<P>
This type defines the first, unabridged format in which properties can be expressed in the bodies of assertions. It is essentially a conjunction of properties which refer to variables. The following is an example of a complex property in this format: 



<UL>

<LI><CODE>(integer(X),list(Y,integer))</CODE>: <CODE>X</CODE> has the property

<A NAME="IDX3895"></A>
<CODE>integer/1</CODE> and <CODE>Y</CODE> has the property 
<A NAME="IDX3896"></A>
<CODE>list/2</CODE>, with second argument <CODE>integer</CODE>. 

</UL>

<P>
<STRONG>Usage:</STRONG> <CODE>property_conjunction(Props)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>Props</CODE> is either a term or a <EM>conjunction</EM> of terms. The main functor and arity of each of those terms corresponds to the definition of a property. The first argument of each such term is a variable which appears as a head argument.

</UL>

</DL>

<P>
<A NAME="IDX3897"></A>
<A NAME="IDX3898"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>property_starterm/1:</B>
<DD><A NAME="IDX3899"></A>


<P>
This type defines a second, compact format in which properties can be expressed in the bodies of assertions. A 
<A NAME="IDX3900"></A>
<CODE>property_starterm/1</CODE> is a term whose main functor is 
<A NAME="IDX3901"></A>
<CODE>*/2</CODE> and, when it appears in an assertion, the number of terms joined by 
<A NAME="IDX3902"></A>
<CODE>*/2</CODE> is exactly the arity of the predicate it refers to. A similar series of properties as in 
<A NAME="IDX3903"></A>
<CODE>property_conjunction/1</CODE> appears, but the arity of each property is one less: the argument position to which they refer (first argument) is left out and determined by the position of the property in the 
<A NAME="IDX3904"></A>
<CODE>property_starterm/1</CODE>. The idea is that each element of the 
<A NAME="IDX3905"></A>
<CODE>*/2</CODE> term corresponds to a head argument position. Several properties can be assigned to each argument position by grouping them in curly brackets. The following is an example of a complex property in this format: 



<UL>

<LI><CODE> integer * list(integer)</CODE>: the first argument of the procedure (or function, or ...) has the property

<A NAME="IDX3906"></A>
<CODE>integer/1</CODE> and the second one has the property 
<A NAME="IDX3907"></A>
<CODE>list/2</CODE>, with second argument <CODE>integer</CODE>. 

<LI><CODE> {integer,var} * list(integer)</CODE>: the first argument of the procedure (or function, or ...) has the properties

<A NAME="IDX3908"></A>
<CODE>integer/1</CODE> and 
<A NAME="IDX3909"></A>
<CODE>var/1</CODE> and the second one has the property 
<A NAME="IDX3910"></A>
<CODE>list/2</CODE>, with second argument <CODE>integer</CODE>. 

</UL>

<P>
<STRONG>Usage:</STRONG> <CODE>property_starterm(Props)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>Props</CODE> is either a term or several terms separated by

<A NAME="IDX3911"></A>
<CODE>*/2</CODE>. The main functor of each of those terms corresponds to that of the definition of a property, and the arity should be one less than in the definition of such property. All arguments of each such term are ground. 
</UL>

</DL>

<P>
<A NAME="IDX3912"></A>
<A NAME="IDX3913"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>complex_goal_property/1:</B>
<DD><A NAME="IDX3914"></A>


<P>
<CODE>complex_goal_property(Props)</CODE>


<P>
<CODE>Props</CODE> is a (possibly empty) 
<A NAME="IDX3915"></A>
complex goal property. Such properties can be either a term or a <EM>conjunction</EM> of terms. The main functor and arity of each of those terms corresponds to the definition of a property. Such properties apply to all executions of all goals of the predicate which comply with the assertion in which the <CODE>Props</CODE> appear. 


<P>
The arguments of the terms in <CODE>Props</CODE> are implicitely augmented with a first argument which corresponds to a goal of the predicate of the assertion in which the <CODE>Props</CODE> appear. For example, the assertion 

<PRE>
     :- comp var(A) + not_further_inst(A).
</PRE>

<P>
has property 
<A NAME="IDX3916"></A>
<CODE>not_further_inst/1</CODE> as goal property, and establishes that in all executions of <CODE>var(A)</CODE> it should hold that <CODE>not_further_inst(var(A),A)</CODE>. 


<P>
<STRONG>Usage:</STRONG> <CODE>complex_goal_property(Props)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>Props</CODE> is either a term or a <EM>conjunction</EM> of terms. The main functor and arity of each of those terms corresponds to the definition of a property. A first implicit argument in such terms identifies goals to which the properties apply.

</UL>

</DL>

<P>
<A NAME="IDX3917"></A>
<A NAME="IDX3918"></A>
<DL>
<DT><span class="define">PROPERTY:</span> <B>nabody/1:</B>
<DD><A NAME="IDX3919"></A>


<P>
<STRONG>Usage:</STRONG> <CODE>nabody(ABody)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>ABody</CODE> is a normalized assertion body.

</UL>

</DL>

<P>
<A NAME="IDX3920"></A>
<A NAME="IDX3921"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>dictionary/1:</B>
<DD><A NAME="IDX3922"></A>


<P>
<STRONG>Usage:</STRONG> <CODE>dictionary(D)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>D</CODE> is a dictionary of variable names.

</UL>

</DL>

<P>
<A NAME="IDX3923"></A>
<A NAME="IDX3924"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>c_assrt_body/1:</B>
<DD><A NAME="IDX3925"></A>


<P>
 


<P>
<A NAME="IDX3926"></A>
<A NAME="IDX3927"></A>
This predicate defines the different types of syntax admissible in the bodies of 
<A NAME="IDX3928"></A>
<CODE>call/1</CODE>, 
<A NAME="IDX3929"></A>
<CODE>entry/1</CODE>, etc. assertions. The following are admissible: 



<PRE>
      Pr : CP [# CO]
</PRE>

<P>
where (fields between [...] are optional): 



<UL>

<LI><CODE>CP</CODE> is a (possibly empty)

<A NAME="IDX3930"></A>
complex argument property (
<A NAME="IDX3931"></A>
<CODE>complex_arg_property/1</CODE>) which applies to the <EM>calls</EM> to the predicate. 

<LI><CODE>CO</CODE> is a

<A NAME="IDX3932"></A>
comment string (
<A NAME="IDX3933"></A>
<CODE>docstring/1</CODE>). This comment only applies if the (possibly empty) properties given for calls in the assertion hold. The usual formatting commands that are applicable in comment strings can be used (see 
<A NAME="IDX3934"></A>
<CODE>stringcommand/1</CODE>). 

</UL>

<P>
The format of the different parts of the assertion body are given by 
<A NAME="IDX3935"></A>
<CODE>n_assrt_body/5</CODE> and its auxiliary types. 


<P>
<STRONG>Usage:</STRONG> <CODE>c_assrt_body(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is a call assertion body.

</UL>

</DL>

<P>
<A NAME="IDX3936"></A>
<A NAME="IDX3937"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>s_assrt_body/1:</B>
<DD><A NAME="IDX3938"></A>


<P>
 


<P>
<A NAME="IDX3939"></A>
<A NAME="IDX3940"></A>
This predicate defines the different types of syntax admissible in the bodies of 
<A NAME="IDX3941"></A>
<CODE>pred/1</CODE>, 
<A NAME="IDX3942"></A>
<CODE>func/1</CODE>, etc. assertions. The following are admissible: 



<PRE>
      Pr : CP =&#62; AP # CO       
      Pr : CP =&#62; AP            
      Pr =&#62; AP # CO            
      Pr =&#62; AP                 
</PRE>

<P>
where: 



<UL>

<LI><CODE>Pr</CODE> is a

<A NAME="IDX3943"></A>
head pattern (
<A NAME="IDX3944"></A>
<CODE>head_pattern/1</CODE>) which describes the predicate or property and possibly gives some implicit call/answer information. 

<LI><CODE>CP</CODE> is a (possibly empty)

<A NAME="IDX3945"></A>
complex argument property (
<A NAME="IDX3946"></A>
<CODE>complex_arg_property/1</CODE>) which applies to the <EM>calls</EM> to the predicate. 

<LI><CODE>AP</CODE> is a (possibly empty)

<A NAME="IDX3947"></A>
complex argument property (
<A NAME="IDX3948"></A>
<CODE>complex_arg_property/1</CODE>) which applies to the <EM>answers</EM> to the predicate (if the predicate succeeds). These only apply if the (possibly empty) properties given for calls in the assertion hold. 

<LI><CODE>CO</CODE> is a

<A NAME="IDX3949"></A>
comment string (
<A NAME="IDX3950"></A>
<CODE>docstring/1</CODE>). This comment only applies if the (possibly empty) properties given for calls in the assertion hold. The usual formatting commands that are applicable in comment strings can be used (see 
<A NAME="IDX3951"></A>
<CODE>stringcommand/1</CODE>). 

</UL>

<P>
The format of the different parts of the assertion body are given by 
<A NAME="IDX3952"></A>
<CODE>n_assrt_body/5</CODE> and its auxiliary types. 


<P>
<STRONG>Usage:</STRONG> <CODE>s_assrt_body(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is a predicate assertion body.

</UL>

</DL>

<P>
<A NAME="IDX3953"></A>
<A NAME="IDX3954"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>g_assrt_body/1:</B>
<DD><A NAME="IDX3955"></A>


<P>
 


<P>
<A NAME="IDX3956"></A>
<A NAME="IDX3957"></A>
This predicate defines the different types of syntax admissible in the bodies of 
<A NAME="IDX3958"></A>
<CODE>comp/1</CODE> assertions. The following are admissible: 



<PRE>
      Pr : CP + GP # CO        
      Pr : CP + GP             
      Pr + GP # CO             
      Pr + GP                  
</PRE>

<P>
where: 



<UL>

<LI><CODE>Pr</CODE> is a

<A NAME="IDX3959"></A>
head pattern (
<A NAME="IDX3960"></A>
<CODE>head_pattern/1</CODE>) which describes the predicate or property and possibly gives some implicit call/answer information. 

<LI><CODE>CP</CODE> is a (possibly empty)

<A NAME="IDX3961"></A>
complex argument property (
<A NAME="IDX3962"></A>
<CODE>complex_arg_property/1</CODE>) which applies to the <EM>calls</EM> to the predicate. 

<LI><CODE>GP</CODE> contains (possibly empty)

<A NAME="IDX3963"></A>
complex goal property (
<A NAME="IDX3964"></A>
<CODE>complex_goal_property/1</CODE>) which applies to the <EM>whole execution</EM> of a call to the predicate. These only apply if the (possibly empty) properties given for calls in the assertion hold. 

<LI><CODE>CO</CODE> is a

<A NAME="IDX3965"></A>
comment string (
<A NAME="IDX3966"></A>
<CODE>docstring/1</CODE>). This comment only applies if the (possibly empty) properties given for calls in the assertion hold. The usual formatting commands that are applicable in comment strings can be used (see 
<A NAME="IDX3967"></A>
<CODE>stringcommand/1</CODE>). 

</UL>

<P>
The format of the different parts of the assertion body are given by 
<A NAME="IDX3968"></A>
<CODE>n_assrt_body/5</CODE> and its auxiliary types. 


<P>
<STRONG>Usage:</STRONG> <CODE>g_assrt_body(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is a comp assertion body.

</UL>

</DL>

<P>
<A NAME="IDX3969"></A>
<A NAME="IDX3970"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>assrt_status/1:</B>
<DD><A NAME="IDX3971"></A>


<P>
The types of assertion status. They have the same meaning as the program-point assertions, and are as follows: 

<PRE>
assrt_status(true).
assrt_status(false).
assrt_status(check).
assrt_status(checked).
assrt_status(trust).
</PRE>

<P>
<STRONG>Usage:</STRONG> <CODE>assrt_status(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is an acceptable status for an assertion.

</UL>

</DL>

<P>
<A NAME="IDX3972"></A>
<A NAME="IDX3973"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>assrt_type/1:</B>
<DD><A NAME="IDX3974"></A>


<P>
The admissible kinds of assertions: 

<PRE>
assrt_type(pred).
assrt_type(prop).
assrt_type(decl).
assrt_type(func).
assrt_type(calls).
assrt_type(success).
assrt_type(comp).
assrt_type(entry).
assrt_type(modedef).
</PRE>

<P>
<STRONG>Usage:</STRONG> <CODE>assrt_type(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is an admissible kind of assertion.

</UL>

</DL>

<P>
<A NAME="IDX3975"></A>
<A NAME="IDX3976"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>predfunctor/1:</B>
<DD><A NAME="IDX3977"></A>


<P>
<STRONG>Usage:</STRONG> <CODE>predfunctor(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is a type of assertion which defines a predicate.

</UL>

</DL>

<P>
<A NAME="IDX3978"></A>
<A NAME="IDX3979"></A>
<DL>
<DT><span class="define">REGTYPE:</span> <B>propfunctor/1:</B>
<DD><A NAME="IDX3980"></A>


<P>
<STRONG>Usage:</STRONG> <CODE>propfunctor(X)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>X</CODE> is a type of assertion which defines a <EM>property</EM>.

</UL>

</DL>

<P>
<A NAME="IDX3981"></A>
<A NAME="IDX3982"></A>
<DL>
<DT><span class="define">PROPERTY:</span> <B>docstring/1:</B>
<DD><A NAME="IDX3983"></A>


<P>
<STRONG>Usage:</STRONG> <CODE>docstring(String)</CODE>

<UL>
<LI><EM>Description:</EM> <CODE>String</CODE> is a text comment with admissible documentation commands. The usual formatting commands that are applicable in comment strings are defined by

<A NAME="IDX3984"></A>
<CODE>stringcommand/1</CODE>. See the 
<A NAME="IDX3985"></A>
<CODE>lpdoc</CODE> manual for documentation on comments.  
</UL>

</DL>

<P><HR><P>
Go to the <A HREF="ciao_1.html">first</A>, <A HREF="ciao_59.html">previous</A>, <A HREF="ciao_61.html">next</A>, <A HREF="ciao_241.html">last</A> section, <A HREF="ciao_toc.html">table of contents</A>.
</BODY>
</HTML>