Sophie

Sophie

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

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               - Introduction</TITLE>
</HEAD>
<BODY> 
Go to the <A HREF="ciao_1.html">first</A>, <A HREF="ciao_1.html">previous</A>, <A HREF="ciao_3.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="SEC2" HREF="ciao_toc.html#TOC2">Introduction</A></H1>

<P>
 



<UL>
<LI><A HREF="ciao_2.html#SEC3">About this manual</A>
<LI><A HREF="ciao_2.html#SEC4">About the Ciao Prolog development system</A>
<LI><A HREF="ciao_2.html#SEC5">ISO-Prolog compliance versus extensibility</A>
<LI><A HREF="ciao_2.html#SEC6">About the name of the System</A>
<LI><A HREF="ciao_2.html#SEC7">Referring to Ciao</A>
<LI><A HREF="ciao_2.html#SEC8">Syntax terminology and notational conventions</A>
<LI><A HREF="ciao_2.html#SEC16">A tour of the manual</A>
<LI><A HREF="ciao_2.html#SEC29">Acknowledgments</A>
<LI><A HREF="ciao_2.html#SEC30">Version/Change Log (ciao)</A>
</UL>



<H2><A NAME="SEC3" HREF="ciao_toc.html#TOC3">About this manual</A></H2>
<P>
<A NAME="IDX11"></A>
<A NAME="IDX12"></A>


<P>
This is the <EM>Reference Manual</EM> for the Ciao Prolog development system. It contains basic information on how to install Ciao Prolog and how to write, debug, and run Ciao Prolog programs from the command line, from inside GNU 
<A NAME="IDX13"></A>
<CODE>emacs</CODE>, or from a windowing desktop. It also documents all the libraries available in the standard distribution. 


<P>
 This manual has been generated using the 
<A NAME="IDX14"></A>
<A NAME="IDX15"></A>
<EM>LPdoc</EM> semi-automatic documentation generator for LP/CLP programs [HC97,Her00]. 
<A NAME="IDX16"></A>
<CODE>lpdoc</CODE> processes Prolog files (and files in other CLP languages) adorned with assertions and machine-readable comments, which should be written in the Ciao 
<A NAME="IDX17"></A>
assertion language [PBH97,PBH00]. From these, it generates manuals in many formats including <CODE>postscript</CODE>, <CODE>pdf</CODE>, <CODE>texinfo</CODE>, <CODE>info</CODE>, <CODE>HTML</CODE>, <CODE>man</CODE>, etc., as well as on-line help, ascii <CODE>README</CODE> files, entries for indices of manuals (<CODE>info</CODE>, WWW, ...), and maintains WWW distribution sites. 


<P>
The big advantage of this approach is that it is easier to keep the on-line and printed documentation in sync with the source code [Knu84]. As a result, <EM>this manual changes continually as the source code is modified</EM>. Because of this, the manual has a version number. You should make sure the manual you are reading, whether it be printed or on-line, coincides with the version of the software that you are using. 


<P>
The approach also implies that there is often a variability in the degree to which different libraries or system components are documented. Many libraries offer abundant documentation, but a few will offer little. The latter is due to the fact that we tend to include libraries in the manual if the code is found to be useful, even if they may still contain sparse documentation. This is because including a library in the manual will at the bare minimum provide formal information (such as the names of exported predicates and their arity, which other modules it loads, etc.), create index entries, pointers for on-line help in the electronic versions of the manuals, and command-line completion capabilities inside 
<A NAME="IDX18"></A>
<CODE>emacs</CODE>. Again, the manual is being updated continuously as the different libraries (and machine-readable documentation in them) are improved. 




<H2><A NAME="SEC4" HREF="ciao_toc.html#TOC4">About the Ciao Prolog development system</A></H2>
<P>
<A NAME="IDX19"></A>
<A NAME="IDX20"></A>


<P>
 The Ciao system is a full programming environment for developing programs in the Prolog language and in several other languages which are extensions and modifications of Prolog in several interesting and useful directions. The programming environment offers a number of tools such as the Ciao standalone compiler (<CODE>ciaoc</CODE>), a traditional-style top-level interactive shell (<CODE>ciaosh</CODE> or <CODE>ciao</CODE>), an interpreter of scripts written in Prolog (<CODE>ciao-shell</CODE>), a Prolog <CODE>emacs</CODE> mode (which greatly helps the task of developing programs with support for editing, debugging, version/change tracking, etc.), numerous libraries, a powerful program preprocessor (<CODE>ciaopp</CODE> [BdlBH99,BLGPH04,HBPLG99], which supports static debugging and optimization from program analysis via source to source program transformation), and an automatic documentation generator (<CODE>lpdoc</CODE>) [HC97,Her00]. A number of execution visualization tools [CGH93,CH00d,CH00c] are also available. 


<P>
This manual documents the first four of the tools mentioned above [see PART I - The program development environment], and the Ciao Prolog language and libraries. The <CODE>ciaopp</CODE> and <CODE>lpdoc</CODE> tools are documented in separate manuals. 
 
The Ciao language [see PART II - The Ciao basic language (engine)] has been designed from the ground up to be small, but to also allow extensions and restrictions in a modular way. The first objective allows producing small executables (including only those builtins used by the program), providing basic support for pure logic programming, and being able to write scripts in Prolog. The second one allows supporting standard ISO-Prolog [see PART III - ISO-Prolog library (iso)], as well as powerful extensions such as constraint logic programming, functional logic programming, and object-oriented logic programming [see PART VII - Ciao Prolog extensions], and restrictions such as working with pure horn clauses. 


<P>
The design of Ciao has also focused on allowing modular program development, as well as automatic program manipulation and optimization. Ciao includes a robust module system [CH00a], module-based automatic incremental compilation [CH99], and modular global program analysis, debugging and optimization [PH99], based on a rich assertion language [see PART V - Annotated Prolog library (assertions)] for declaring (optional) program properties (including types and modes), which can be checked either statically or dynamically. The program analysis, static debugging and optimization tasks related to these assertions are performed by the <CODE>ciaopp</CODE> preprocessor, as mentioned above. These assertions (together with special comment-style declarations) are also the ones used by the <CODE>lpdoc</CODE> autodocumenter to generate documentation for programs (the comment-style declarations are documented in the <CODE>lpdoc</CODE> manual). 


<P>
Ciao also includes several other features and utilities, such as support for several forms of executables, concurrency (threads), distributed and parallel execution, higher-order, WWW programming (PiLLoW [CHV96b]), interfaces to other languages like C and Java, database interfaces, graphical interfaces, etc., etc. [see PARTS VI to XI]. 




<H2><A NAME="SEC5" HREF="ciao_toc.html#TOC5">ISO-Prolog compliance versus extensibility</A></H2>
<P>
<A NAME="IDX21"></A>
<A NAME="IDX22"></A>
<A NAME="IDX23"></A>
<A NAME="IDX24"></A>


<P>
 One of the innovative features of Ciao is that it has been designed to subsume 
<A NAME="IDX25"></A>
<A NAME="IDX26"></A>
<EM>ISO-Prolog</EM> (International Standard ISO/IEC 13211-1, PROLOG: Part 1--General Core [DEDC96]), while at the same time extending it in many important ways. The intention is to ensure that all ISO-compliant Prolog programs run correctly under Ciao. At the same time, the Ciao module system (see [PART II - The Ciao basic language (engine)] and [CH00a] for a discussion of the motivations behind the design) allows selectively avoiding the loading of most ISO-builtins (and changing some other ISO characteristics) when not needed, so that it is possible to work with purer subsets of Prolog and also to build small executables. Also, this module system makes it possible to develop extensions using these purer subsets (or even the full ISO-standard) as a starting point. Using these features, the Ciao distribution includes libraries which significantly extend the language both syntactically and semantically. 


<P>
Compliance with ISO is still not complete: currently there are some minor deviations in, e.g., the treatment of characters, the syntax, some of the arithmetic functions, and part of the error system. On the other hand, Ciao has been reported by independent sources (members of the standarization body) to be one of the most conforming Prologs at the moment of this writing, and the first one to be able to compile all the standard-conforming test cases. Also, Ciao does not offer a strictly conforming mode which rejects uses of non-ISO features. However, in order to aid programmers who wish to write standard compliant programs, library predicates that correspond to those in the ISO-Prolog standard are marked specially in the manuals, and differences between the Ciao and the prescribed ISO-Prolog behaviours, if any, are commented appropriately. 


<P>
The intention of the Ciao developers is to progressively complete the compliance of Ciao with the published parts of the ISO standard as well as with other reasonable extensions of the standard may be published in the future. However, since one of the design objectives of Ciao is to address some shortcomings of previous implementations of Prolog and logic programming in general, we also hope that some of the better ideas present in the system will make it eventually into the standards. 




<H2><A NAME="SEC6" HREF="ciao_toc.html#TOC6">About the name of the System</A></H2>
<P>
<A NAME="IDX27"></A>
<A NAME="IDX28"></A>
<A NAME="IDX29"></A>
<A NAME="IDX30"></A>


<P>
 After reading the previous sections the sharp reader may have already seen the logic behind the 'Ciao Prolog' name. Ciao is an interesting word which means both <EM>hello</EM> and <EM>goodbye</EM>. Ciao Prolog intends to be a really good, all-round, freely available ISO-Prolog system which can be used as a classical Prolog, in both academic and industrial environments (and, in particular, to introduce users to Prolog and to constraint and logic programming --the <EM>hello</EM> part). But Ciao is also a new-generation, multiparadigm programming language and program development system which goes well beyond Prolog and other classical logic programming languages. And it has the advantage (when compared to other systems) that it does so while keeping full Prolog compatibility when needed. 
 




<H2><A NAME="SEC7" HREF="ciao_toc.html#TOC7">Referring to Ciao</A></H2>
<P>
<A NAME="IDX31"></A>
<A NAME="IDX32"></A>
<A NAME="IDX33"></A>
<A NAME="IDX34"></A>


<P>
If you find Ciao or any of its components useful, we would appreciate very much if you added a reference to this manual (i.e., the Ciao reference manual [BCC97]) in your work. The following is an appropriate BiBTeX entry with the relevant data: 


<P>



<PRE>
@techreport{ciao-reference-manual-tr,
  author =       {F. Bueno and D. Cabeza and M. Carro and M. Hermenegildo 
                  and P. L\'{o}pez-Garc\'{\i}a and G. Puebla},
  title =        {The Ciao Prolog system. Reference manual},
  institution =  {School of Computer Science, 
                  Technical University of Madrid (UPM)},
  year =         1997,
  month =        {August},
  number =       {{CLIP}3/97.1},
  note =         {Available from http://www.clip.dia.fi.upm.es/}
}

</PRE>

<P>
 




<H2><A NAME="SEC8" HREF="ciao_toc.html#TOC8">Syntax terminology and notational conventions</A></H2>
<P>
<A NAME="IDX35"></A>
<A NAME="IDX36"></A>


<P>
 This manual is not meant to be an introduction to the Prolog language. The reader is referred to standard textbooks on Prolog such as [SS86,CM81,Apt97,Hog84]. However, we would like to refresh herein some concepts for the sake of establishing terminology. Also, we will briefly introduce a few of the extensions that Ciao brings to the Prolog language. 



<UL>
<LI><A HREF="ciao_2.html#SEC9">Predicates and their components</A>
<LI><A HREF="ciao_2.html#SEC10">Characters and character strings</A>
<LI><A HREF="ciao_2.html#SEC11">Predicate specs</A>
<LI><A HREF="ciao_2.html#SEC12">Modes</A>
<LI><A HREF="ciao_2.html#SEC13">Properties and types</A>
<LI><A HREF="ciao_2.html#SEC14">Declarations</A>
<LI><A HREF="ciao_2.html#SEC15">Operators</A>
</UL>



<H3><A NAME="SEC9" HREF="ciao_toc.html#TOC9">Predicates and their components</A></H3>

<P>
In Prolog, procedures are called <EM>predicates</EM> and predicate calls <EM>literals</EM>. They all have the classical syntax of procedures (and of logic predications and of mathematical functions). Predicates are identified in this manual by a keyword 'PREDICATE' at the right margin of the place where they are documented. 


<P>
Prolog instructions are expressions made up of control constructs (section <A HREF="ciao_16.html#SEC128">Control constructs/predicates</A>) and literals, and are called <EM>goals</EM>. Literals are also (atomic) goals. 


<P>
A predicate definition is a sequence of clauses. A clause has the form "<CODE>H :- B.</CODE>" (ending in '<CODE>.</CODE>'), where <CODE>H</CODE> is syntactically the same as a literal and is called the clause <EM>head</EM>, and <CODE>B</CODE> is a goal and is called the clause <EM>body</EM>. A clause with no body is written "<CODE>H.</CODE>" and is called a <EM>fact</EM>. Clauses with body are also called <EM>rules</EM>. A Prolog program is a sequence of predicate definitions. 




<H3><A NAME="SEC10" HREF="ciao_toc.html#TOC10">Characters and character strings</A></H3>

<P>
We adopt the following convention for delineating character strings in the text of this manual: when a string is being used as a Prolog atom it is written thus: <CODE>user</CODE> or <CODE>'user'</CODE>; but in all other circumstances double quotes are used (as in <CODE>"hello"</CODE>). 


<P>
<A NAME="IDX37"></A>
<A NAME="IDX38"></A>
When referring to keyboard characters, printing characters are written thus: <KBD>a</KBD>, while control characters are written like this: <KBD>^A</KBD>. Thus <KBD>^C</KBD> is the character you get by holding down the <KBD>CTL</KBD> key while you type <KBD>c</KBD>. Finally, the special control characters carriage-return, line-feed and space are often abbreviated to <KBD>RET</KBD>, <KBD>LFD</KBD> and <KBD>SPC</KBD> respectively. 




<H3><A NAME="SEC11" HREF="ciao_toc.html#TOC11">Predicate specs</A></H3>

<P>
Predicates in Prolog are distinguished by their name <EM>and</EM> their arity. We will call <CODE>name/arity</CODE> a 
<A NAME="IDX39"></A>
<EM>predicate spec</EM>. The notation <CODE>name/arity</CODE> is therefore used when it is necessary to refer to a predicate unambiguously. For example, <CODE>concatenate/3</CODE> specifies the predicate which is named "concatenate" and which takes 3 arguments. 


<P>
(Note that different predicates may have the same name and different arity. Conversely, of course, they may have the same arity and different name.) 




<H3><A NAME="SEC12" HREF="ciao_toc.html#TOC12">Modes</A></H3>

<P>
When documenting a predicate, we will often describe its usage with a 
<A NAME="IDX40"></A>
mode spec which has the form <CODE>name(Arg1, ..., ArgN)</CODE> where each <CODE>Arg</CODE> may be preceded by a 
<A NAME="IDX41"></A>
<EM>mode</EM>. A mode is a functor which is wrapped around an argument (or prepended if defined as an operator). Such a mode allows documenting in a compact way the 
<A NAME="IDX42"></A>
instantiation state on call and exit of the argument to which it is applied. The set of modes which can be used in Ciao is not fixed. Instead, arbitrary modes can be defined by in programs using the 
<A NAME="IDX43"></A>
<CODE>modedef/1</CODE> declarations of the Ciao 
<A NAME="IDX44"></A>
<EM>assertion language</EM> (section <A HREF="ciao_59.html#SEC266">The Ciao assertion package</A> for details). Modes are identified in this manual by a keyword 'MODE'. 


<P>
Herein, we will use the set of modes defined in the Ciao 
<A NAME="IDX45"></A>
<CODE>isomodes</CODE> library, which is essentially the same as those used in the 
<A NAME="IDX46"></A>
ISO-Prolog standard (section <A HREF="ciao_63.html#SEC282">ISO-Prolog modes</A>). 




<H3><A NAME="SEC13" HREF="ciao_toc.html#TOC13">Properties and types</A></H3>

<P>
Although Ciao Prolog is <EM>not</EM> a typed language, it allows writing (and using) types, as well as (more general) properties. There may be properties of the states and of the computation. Properties of the states allow expressing characteristics of the program variables during computation, like in <CODE>sorted(X)</CODE> (<CODE>X</CODE> is a sorted list). Properties of the computation allow expressing characteristics of a whole computation, like in <CODE>is_det(p(X,Y))</CODE> (such calls yield only one solution). Properties are just a special form of predicates (section <A HREF="ciao_61.html#SEC275">Declaring regular types</A>) and are identified in this manual by a keyword 'PROPERTY'. 


<P>
Ciao types are <EM>regular types</EM> (section <A HREF="ciao_61.html#SEC275">Declaring regular types</A>), which are a special form of properties themselves. They are identified in this manual by a keyword 'REGTYPE'. 




<H3><A NAME="SEC14" HREF="ciao_toc.html#TOC14">Declarations</A></H3>

<P>
A <EM>declaration</EM> provides information to one of the Ciao environment tools. Declarations are interspersed in the code of a program. Usually the target tool is either the compiler (telling it that a predicate is dynamic, or a meta-predicate, etc.), the preprocessor (which understands declarations of properties and types, assertions, etc.), or the autodocumenter (which understands the previous declarations and also certain "comment" declarations). 


<P>
A declaration has the form <CODE>:- D.</CODE> where <CODE>D</CODE> is syntactically the same as a literal. Declarations are identified in this manual by a keyword 'DECLARATION'. 


<P>
In Ciao users can define (and document) new declarations. New declarations are typically useful when defining extensions to the language (which in Ciao are called packages). Such extensions are often implemented as 
<A NAME="IDX47"></A>
expansions (see section <A HREF="ciao_29.html#SEC171">Extending the syntax</A>). There are many such extensions in Ciao. The 
<A NAME="IDX48"></A>
<CODE>functions</CODE> library, which provides fuctional syntax, is an example. The fact that in Ciao expansions are local to modules (as operators, see below) makes it possible to use a certain language extension in one module without affecting other modules. 




<H3><A NAME="SEC15" HREF="ciao_toc.html#TOC15">Operators</A></H3>

<P>
An <EM>operator</EM> is a functor (or predicate name) which has been declared as such, thus allowing its use in a prefix, infix, or suffix fashion, instead of the standard procedure-like fashion. E.g., declaring <CODE>+</CODE> as an infix operator allows writing <CODE>X+Y</CODE> instead of <CODE>'+'(X,Y)</CODE> (which may still, of course, be written). 


<P>
<EM>Operators in Ciao are local to the module/file where they are declared</EM>. However, some operators are standard and allowed in every program (see section <A HREF="ciao_40.html#SEC210">Defining operators</A>). This manual documents the operator declarations in each (library) module where they are included. As with expansions, the fact that in Ciao operators are local to modules makes it possible to use a certain language extension in one module without affecting other modules. 




<H2><A NAME="SEC16" HREF="ciao_toc.html#TOC16">A tour of the manual</A></H2>
<P>
<A NAME="IDX49"></A>
<A NAME="IDX50"></A>
<A NAME="IDX51"></A>
<A NAME="IDX52"></A>


<P>
The rest of the introductory chapters after this one provide a first "getting started" introduction for newcomers to the Ciao system. The rest of the chapters in the manual are organized into a sequence of major parts as follows: 



<UL>
<LI><A HREF="ciao_2.html#SEC17">PART I - The program development environment</A>
<LI><A HREF="ciao_2.html#SEC18">PART II - The Ciao basic language (engine)</A>
<LI><A HREF="ciao_2.html#SEC19">PART III - ISO-Prolog library (iso)</A>
<LI><A HREF="ciao_2.html#SEC20">PART IV - Classic Prolog library (classic)</A>
<LI><A HREF="ciao_2.html#SEC21">PART V - Annotated Prolog library (assertions)</A>
<LI><A HREF="ciao_2.html#SEC22">PART VI - Ciao Prolog library miscellanea</A>
<LI><A HREF="ciao_2.html#SEC23">PART VII - Ciao Prolog extensions</A>
<LI><A HREF="ciao_2.html#SEC24">PART VIII - Interfaces to other languages and systems</A>
<LI><A HREF="ciao_2.html#SEC25">PART IX - Abstract data types</A>
<LI><A HREF="ciao_2.html#SEC26">PART X - Miscellaneous standalone utilities</A>
<LI><A HREF="ciao_2.html#SEC27">PART XI - Contributed libraries</A>
<LI><A HREF="ciao_2.html#SEC28">PART XII - Appendices</A>
</UL>



<H3><A NAME="SEC17" HREF="ciao_toc.html#TOC17">PART I - The program development environment</A></H3>

<P>
This part documents the components of the basic Ciao program development environment. They include: 


<DL COMPACT>

<DT>ciaoc:
<DD>
the standalone compiler, which creates executables without having to enter the interactive top-level. 

<DT>ciaosh:
<DD>
(also invoked simply as <CODE>ciao</CODE>) is an interactive top-level shell, similar to the one found on most Prolog systems (with some enhancements). 

<DT>debugger.pl:
<DD>
a Byrd box-type debugger, similar to the one found on most Prolog systems (also with some enhancements, such as source-level debugging). This is not a standalone application, but is rather included in 
<A NAME="IDX53"></A>
<CODE>ciaosh</CODE>, as is done in other Prolog systems. However, it is also <EM>embeddable</EM>, in the sense that it can be included as a library in executables, and activated dynamically and conditionally while such executables are running. 

<DT>ciao-shell:
<DD>
an interpreter/compiler for <EM>Prolog scripts</EM> (i.e., files containing Prolog code which run without needing explicit compilation). 

<DT>ciao.el:
<DD>
a <EM>complete program development enviroment</EM>, based 
<A NAME="IDX54"></A>
<A NAME="IDX55"></A>
<A NAME="IDX56"></A>
<A NAME="IDX57"></A>
on 
<A NAME="IDX58"></A>
GNU emacs, with syntax coloring, direct access to all the tools described above (as well as the preprocessor and the documenter), atomatic location of errors, source-level debugging, context-sensitive access to on-line help/manuals, etc. The use of this environment is <EM>very highly recommended</EM>! 

</DL>

<P>
The Ciao program development environment also includes 
<A NAME="IDX59"></A>
<CODE>ciaopp</CODE>, the 
<A NAME="IDX60"></A>
preprocessor, and 
<A NAME="IDX61"></A>
<CODE>lpdoc</CODE>, the 
<A NAME="IDX62"></A>
documentation generator, which are described in separate manuals. 




<H3><A NAME="SEC18" HREF="ciao_toc.html#TOC18">PART II - The Ciao basic language (engine)</A></H3>

<P>
 This part documents the 
<A NAME="IDX63"></A>
<A NAME="IDX64"></A>
<EM>Ciao basic builtins</EM>. These predefined predicates and declarations are available in every program, unless the 
<A NAME="IDX65"></A>
<CODE>pure</CODE> package is used (by using a <CODE>:- module(_,_,[pure]).</CODE> declaration or <CODE>:- use_package(pure).</CODE>). These predicates are contained in the <CODE>engine</CODE> directory 
<A NAME="IDX66"></A>
<A NAME="IDX67"></A>
within the <CODE>lib</CODE> library. 
<A NAME="IDX68"></A>
<A NAME="IDX69"></A>
The rest of the library predicates, including the packages that provide most of the 
<A NAME="IDX70"></A>
ISO-Prolog builtins, are documented in subsequent parts. 




<H3><A NAME="SEC19" HREF="ciao_toc.html#TOC19">PART III - ISO-Prolog library (iso)</A></H3>

<P>
 This part documents the 
<A NAME="IDX71"></A>
<A NAME="IDX72"></A>
<EM>iso</EM> package which provides to Ciao programs (most of) the ISO-Prolog functionality , including the 
<A NAME="IDX73"></A>
<A NAME="IDX74"></A>
<EM>ISO-Prolog builtins</EM> not covered by the basic library. 




<H3><A NAME="SEC20" HREF="ciao_toc.html#TOC20">PART IV - Classic Prolog library (classic)</A></H3>

<P>
This part documents some Ciao libraries which provide additional predicates and functionalities that, despite not being in the ISO standard, are present in many popular Prolog systems. This includes definite clause grammars (DCGs), "Quintus-style" internal database, list processing predicates, DEC-10 Prolog-style input/output, formatted output, dynamic loading of modules, activation of operators at run-time, etc. 




<H3><A NAME="SEC21" HREF="ciao_toc.html#TOC21">PART V - Annotated Prolog library (assertions)</A></H3>

<P>
Ciao allows <EM>annotating</EM> the program code with <EM>assertions</EM>. Such assertions include 
<A NAME="IDX75"></A>
type and 
<A NAME="IDX76"></A>
instantiation mode declarations, but also more general properties as well as comments in the style of the <EM>literate programming</EM>. These assertions document predicates (and modules and whole applications) and can be used by the Ciao preprocessor/compiler while debugging and optimizing the program or library, and by the Ciao documenter to build the program or library reference manual. 




<H3><A NAME="SEC22" HREF="ciao_toc.html#TOC22">PART VI - Ciao Prolog library miscellanea</A></H3>

<P>
This part documents several Ciao libraries which provide different useful additional functionalities. Such functionalities include performing operating system calls, gathering statistics from the Prolog engine, file and file name manipulation, error and exception handling, fast reading and writing of terms (
<A NAME="IDX77"></A>
marshalling and 
<A NAME="IDX78"></A>
unmarshalling), file locking, program reporting messages, pretty-printing programs and assertions, a browser of the system libraries, additional expansion utilities, concurrent aggregates, graph visualization, etc. 




<H3><A NAME="SEC23" HREF="ciao_toc.html#TOC23">PART VII - Ciao Prolog extensions</A></H3>

<P>
The libraries documented in this part extend the Ciao language in several different ways. The extensions include: 

<UL>
<LI>

<A NAME="IDX79"></A>
pure Prolog programming (well, this can be viewed more as a restriction than an extension); 
<LI>

<A NAME="IDX80"></A>
feature terms or 
<A NAME="IDX81"></A>
<A NAME="IDX82"></A>
<EM>records</EM> (i.e., structures with names for each field); 
<LI>

<A NAME="IDX83"></A>
parallel programming (e.g., &#38;-Prolog style); 
<LI>

<A NAME="IDX84"></A>
functional syntax; 
<LI>

<A NAME="IDX85"></A>
higher-order library; 
<LI>

<A NAME="IDX86"></A>
global variables; 
<LI><CODE>setarg</CODE> and <CODE>undo</CODE>;

<LI>

<A NAME="IDX87"></A>
delaying predicate execution; 
<LI>

<A NAME="IDX88"></A>
active modules; 
<LI>

<A NAME="IDX89"></A>
breadth-first execution; 
<LI>

<A NAME="IDX90"></A>
iterative deepening-based execution; 
<LI>

<A NAME="IDX91"></A>
constraint logic programming; 
<LI>

<A NAME="IDX92"></A>
object oriented programming. 
</UL>



<H3><A NAME="SEC24" HREF="ciao_toc.html#TOC24">PART VIII - Interfaces to other languages and systems</A></H3>

<P>
The following interfaces to/from Ciao Prolog are documented in this part: 

<UL>
<LI>

<A NAME="IDX93"></A>
External interface (e.g., to C). 
<LI>

<A NAME="IDX94"></A>
Socket interface. 
<LI>

<A NAME="IDX95"></A>
Tcl/tk interface. 
<LI>

<A NAME="IDX96"></A>
Web interface (http, html, xml, etc.); 
<LI>

<A NAME="IDX97"></A>
Persistent predicate databases (interface between the Prolog internal database and the external file system). 
<LI>

<A NAME="IDX98"></A>
SQL-like database interface (interface between the Prolog internal database and external SQL/ODBC systems). 
<LI>

<A NAME="IDX99"></A>
Java interface. 
<LI>

<A NAME="IDX100"></A>
Calling emacs from Prolog. 
</UL>



<H3><A NAME="SEC25" HREF="ciao_toc.html#TOC25">PART IX - Abstract data types</A></H3>

<P>
This part includes libraries which implement some generic data structures (abstract data types) that are used frequently in programs or in the Ciao system itself. 




<H3><A NAME="SEC26" HREF="ciao_toc.html#TOC26">PART X - Miscellaneous standalone utilities</A></H3>

<P>
This is the documentation for a set of miscellaneous 
<A NAME="IDX101"></A>
standalone utilities contained in the <CODE>etc</CODE> directory of the Ciao distribution. 




<H3><A NAME="SEC27" HREF="ciao_toc.html#TOC27">PART XI - Contributed libraries</A></H3>

<P>
<A NAME="IDX102"></A>
<A NAME="IDX103"></A>
This part includes a number of libraries which have contributed by users of the Ciao system. Over time, some of these libraries are moved to the main library directories of the system. 
 




<H3><A NAME="SEC28" HREF="ciao_toc.html#TOC28">PART XII - Appendices</A></H3>

<P>
These appendices describe the 
<A NAME="IDX104"></A>
installation of the Ciao environment on different systems and some other issues such as 
<A NAME="IDX105"></A>
reporting bugs, signing up on the Ciao user's 
<A NAME="IDX106"></A>
mailing list, 
<A NAME="IDX107"></A>
downloading new versions, 
<A NAME="IDX108"></A>
limitations, etc. 


<P>
 




<H2><A NAME="SEC29" HREF="ciao_toc.html#TOC29">Acknowledgments</A></H2>
<P>
<A NAME="IDX109"></A>
<A NAME="IDX110"></A>


<P>
 The Ciao system is a joint effort on one side of the present (
<A NAME="IDX111"></A>
<A NAME="IDX112"></A>
<EM>Francisco Bueno</EM>, 
<A NAME="IDX113"></A>
<A NAME="IDX114"></A>
<EM>Daniel Cabeza</EM>, 
<A NAME="IDX115"></A>
<A NAME="IDX116"></A>
<EM>Manuel Carro</EM>, 
<A NAME="IDX117"></A>
<A NAME="IDX118"></A>
<EM>Manuel Hermenegildo</EM>, 
<A NAME="IDX119"></A>
<A NAME="IDX120"></A>
<EM>Pedro L&oacute;pez</EM>, and 
<A NAME="IDX121"></A>
<A NAME="IDX122"></A>
<EM>Germ&aacute;n Puebla</EM>) and past (
<A NAME="IDX123"></A>
<A NAME="IDX124"></A>
<EM>Mar&iacute;a Jos&eacute; Garc&iacute;a de la Banda</EM>) members of the 
<A NAME="IDX125"></A>
<A NAME="IDX126"></A>
<EM>CLIP group</EM> at the School of Computer Science, 
<A NAME="IDX127"></A>
<A NAME="IDX128"></A>
<EM>Technical University of Madrid</EM> , and on the other side of several colleagues and students that have collaborated with us over the years of its development. The following is an (inevitably incomplete) list of those that have contributed to the development of Ciao: 



<UL>

<LI>The

<A NAME="IDX129"></A>
<A NAME="IDX130"></A>
<EM>Ciao engine</EM>, compiler, libraries and documentation, although completely rewritten at this point, have their origins in the 
<A NAME="IDX131"></A>
<A NAME="IDX132"></A>
<EM>&#38;-Prolog</EM> 
<A NAME="IDX133"></A>
<A NAME="IDX134"></A>
<EM>parallel Prolog</EM> engine and 
<A NAME="IDX135"></A>
<A NAME="IDX136"></A>
<EM>parallelizing compiler</EM>, developed by 
<A NAME="IDX137"></A>
<A NAME="IDX138"></A>
<EM>Manuel Hermenegildo</EM>, 
<A NAME="IDX139"></A>
<A NAME="IDX140"></A>
<EM>Kevin Greene</EM>, 
<A NAME="IDX141"></A>
<A NAME="IDX142"></A>
<EM>Kalyan Muthukumar</EM>, and 
<A NAME="IDX143"></A>
<A NAME="IDX144"></A>
<EM>Roger Nasr</EM> at 
<A NAME="IDX145"></A>
<A NAME="IDX146"></A>
<EM>MCC</EM> and later at 
<A NAME="IDX147"></A>
<A NAME="IDX148"></A>
<EM>UPM</EM>. The &#38;-Prolog engine and low-level (
<A NAME="IDX149"></A>
<A NAME="IDX150"></A>
<EM>WAM</EM>) compilers in turn were derived from early versions (0.5 to 0.7) of 
<A NAME="IDX151"></A>
<A NAME="IDX152"></A>
<EM>SICStus Prolog</EM> [Car88]. SICStus is an excellent, high performance Prolog system, developed by 
<A NAME="IDX153"></A>
<A NAME="IDX154"></A>
<EM>Mats Carlsson</EM> and colleagues at the 
<A NAME="IDX155"></A>
<A NAME="IDX156"></A>
<EM>Swedish Institute of Computer Science</EM> (
<A NAME="IDX157"></A>
<A NAME="IDX158"></A>
<EM>SICS</EM>), that every user of Prolog should check out [Swe95,AAF91]. Very special thanks are due to 
<A NAME="IDX159"></A>
<A NAME="IDX160"></A>
<EM>Seif Haridi</EM>, 
<A NAME="IDX161"></A>
<A NAME="IDX162"></A>
<EM>Mats Carlsson</EM>, and colleagues at SICS for allowing the SICStus 0.5-0.7 components in 
<A NAME="IDX163"></A>
<A NAME="IDX164"></A>
<EM>&#38;-Prolog</EM> and its successor, Ciao, to be distributed freely. Parts of the parallel abstract machine have been developed in collaboration with 
<A NAME="IDX165"></A>
<A NAME="IDX166"></A>
<EM>Gopal Gupta</EM> and 
<A NAME="IDX167"></A>
<A NAME="IDX168"></A>
<EM>Enrico Pontelli</EM> (
<A NAME="IDX169"></A>
<A NAME="IDX170"></A>
<EM>New Mexico State University</EM>). 

<LI>Many aspects of the analyzers in the

<A NAME="IDX171"></A>
<A NAME="IDX172"></A>
<EM>Ciao preprocessor</EM> (
<A NAME="IDX173"></A>
<CODE>ciaopp</CODE>) have been developed in collaboration with 
<A NAME="IDX174"></A>
<A NAME="IDX175"></A>
<EM>Peter Stuckey</EM> (
<A NAME="IDX176"></A>
<A NAME="IDX177"></A>
<EM>Melbourne U.</EM>), 
<A NAME="IDX178"></A>
<A NAME="IDX179"></A>
<EM>Kim Marriott</EM> (
<A NAME="IDX180"></A>
<A NAME="IDX181"></A>
<EM>Monash U.</EM>), 
<A NAME="IDX182"></A>
<A NAME="IDX183"></A>
<EM>Maurice Bruynooghe</EM>, 
<A NAME="IDX184"></A>
<A NAME="IDX185"></A>
<EM>Gerda Janssens</EM>, 
<A NAME="IDX186"></A>
<A NAME="IDX187"></A>
<EM>Anne Mulkers</EM>, and 
<A NAME="IDX188"></A>
<A NAME="IDX189"></A>
<EM>Veroniek Dumortier</EM> (
<A NAME="IDX190"></A>
<A NAME="IDX191"></A>
<EM>K.U. Leuven</EM>), and 
<A NAME="IDX192"></A>
<A NAME="IDX193"></A>
<EM>Saumya Debray</EM> (
<A NAME="IDX194"></A>
<A NAME="IDX195"></A>
<EM>U. of Arizona</EM>). The assertion system has been developed in collaboration with 
<A NAME="IDX196"></A>
<A NAME="IDX197"></A>
<EM>Jan Maluzynski</EM> and 
<A NAME="IDX198"></A>
<A NAME="IDX199"></A>
<EM>Wlodek Drabent</EM> (
<A NAME="IDX200"></A>
<A NAME="IDX201"></A>
<EM>Linkoping U.</EM>) and 
<A NAME="IDX202"></A>
<A NAME="IDX203"></A>
<EM>Pierre Deransart</EM> (
<A NAME="IDX204"></A>
<A NAME="IDX205"></A>
<EM>INRIA</EM>). The core of type inference system derives from the system developed by 
<A NAME="IDX206"></A>
<A NAME="IDX207"></A>
<EM>John Gallagher</EM> [GdW94] (
<A NAME="IDX208"></A>
<A NAME="IDX209"></A>
<EM>Bristol University</EM>) and later adapted to CLP(FD) by 
<A NAME="IDX210"></A>
<A NAME="IDX211"></A>
<EM>Pawel Pietrzak</EM> (
<A NAME="IDX212"></A>
<A NAME="IDX213"></A>
<EM>Linkoping U.</EM>). 

<LI>The constraint solvers for <EM>R</EM> and <EM>Q</EM> are derived from the code developed by

<A NAME="IDX214"></A>
<A NAME="IDX215"></A>
<EM>Christian Holzbauer</EM> (
<A NAME="IDX216"></A>
<A NAME="IDX217"></A>
<EM>Austrian Research Institute for AI</EM> in Vienna) [Hol94,Hol90,Hol92]. 

<LI>The Ciao manuals include material from the

<A NAME="IDX218"></A>
<A NAME="IDX219"></A>
<EM>DECsystem-10 Prolog User's Manual</EM> by 
<A NAME="IDX220"></A>
<A NAME="IDX221"></A>
<EM>D.L. Bowen</EM> (editor), 
<A NAME="IDX222"></A>
<A NAME="IDX223"></A>
<EM>L. Byrd</EM>, 
<A NAME="IDX224"></A>
<A NAME="IDX225"></A>
<EM>F.C.N. Pereira</EM>, 
<A NAME="IDX226"></A>
<A NAME="IDX227"></A>
<EM>L.M. Pereira</EM>, and 
<A NAME="IDX228"></A>
<A NAME="IDX229"></A>
<EM>D.H.D. Warren</EM> [BBP81]. They also contain material from the SICStus Prolog user manuals for SICStus versions 0.5-0.7 by 
<A NAME="IDX230"></A>
<A NAME="IDX231"></A>
<EM>Mats Carlsson</EM> and 
<A NAME="IDX232"></A>
<A NAME="IDX233"></A>
<EM>Johan Widen</EM> [Car88], as well as from the Prolog ISO standard documentation [DEDC96]. 

<LI>Ciao is designed to be highly extendable in a modular way. Many of the libraries distributed with Ciao have been developed by other people all of which is impossible to mention here. Individual author names are included in the documentation of each library and appear in the indices.

<LI>The development of the Ciao system has been supported in part by European research projects

<A NAME="IDX234"></A>
ACCLAIM, 
<A NAME="IDX235"></A>
PARFORCE, 
<A NAME="IDX236"></A>
DISCIPL, 
<A NAME="IDX237"></A>
AMOS, and 
<A NAME="IDX238"></A>
ASAP and by 
<A NAME="IDX239"></A>
MICYT projects 
<A NAME="IDX240"></A>
ELLA, 
<A NAME="IDX241"></A>
EDIPIA, and 
<A NAME="IDX242"></A>
CUBICO. 

</UL>

<P>
If you feel you have contributed to the development of Ciao and we have forgotten adding your name to this list or the acknowledgements given in the different chapters, please let us know and we will be glad to give proper credits. 




<H2><A NAME="SEC30" HREF="ciao_toc.html#TOC30">Version/Change Log (<CODE>ciao</CODE>)</A></H2>

<DL COMPACT>

<DT><STRONG>Version 1.10 (2004/7/29, 16:12:3 CEST)</STRONG>
<DD>
 

<UL>
<LI>Classical prolog mode as default behavior.

<LI>Emacs-based environment improved.


<UL>
<LI>Improved emacs inferior (interaction) mode for Ciao and CiaoPP.

<LI>Xemacs compatibility improved (thanks to A. Rigo).

<LI>New icons and modifications in the environment for the preprocessor.

<LI>Icons now installed in a separate dir.

<LI>Compatibility with newer versions of

<A NAME="IDX243"></A>
<CODE>Cygwin</CODE>. 
<LI>Changes to programming environment:


<UL>
<LI>Double-click startup of programming environment.

<LI>Reorganized menus: help and customization grouped in separate menus.

<LI>Error location extended.

<LI>Automatic/Manual location of errors produced when running Ciao tools now customizable.

<LI>Presentation of CiaoPP preprocessor output improved.

</UL>

<LI>Faces and coloring improved:


<UL>
<LI>Faces for syntax-based highlighting more customizable.

<LI>Syntax-based coloring greatly improved. Literal-level assertions also correctly colored now.

<LI>Syntax-based coloring now also working on ASCII terminals (for newer versions of emacs).

<LI>Listing user-defined directives allowed to be colored in special face.

<LI>Syntax errors now colored also in inferior buffers.

<LI>Customizable faces now appear in the documentation.

<LI>Added new tool bar button (and binding) to refontify block/buffer.

<LI>Error marks now cleared automatically also when generating docs.

<LI>Added some fixes to hooks in lpdoc buffer.

</UL>

</UL>

<LI>Bug fixes in compiler.


<UL>
<LI>Replication of clauses in some cases (thanks to S. Craig).

</UL>

<LI>Improvements related to supported platforms


<UL>
<LI>Compilation and installation in different palatforms have been improved.

<LI>New Mac OS X kernels supported.

</UL>

<LI>Improvement and bugs fixes in the engine:


<UL>
<LI>Got rid of several segmentation violation problems.

<LI>Number of significant decimal digits to be printed now computed accurately.

<LI>Added support to test conversion of a Ciao integer into a machine int.

<LI>Unbound length atoms now always working.

<LI>C interface .h files reachable through a more standard location (thanks to R. Bagnara).

<LI>Compatibility with newer versions of gcc.

</UL>

<LI>New libraries and utilities added to the system:


<UL>
<LI>Factsdb: facts defined in external files can now be automatically cached on-demand.

<LI>Symfnames: File aliasing to internal streams added.

</UL>

<LI>New libraries added (in beta state):


<UL>
<LI>fd: clp(FD)

<LI>xml_path: XML querying and transformation to Prolog.

<LI>xdr_handle: XDR schema to HTML forms utility.

<LI>ddlist: Two-way traversal list library.

<LI>gnuplot: Interface to GnuPlot.

<LI>time_analyzer: Execution time profiling.

</UL>

<LI>Some libraries greatly improved:


<UL>
<LI>Interface to Tcl/Tk very improved.


<UL>
<LI>Corrected many bugs in both interaction Prolog to Tcl/Tk and viceversa.

<LI>Execution of Prolog goals from TclTk revamped.

<LI>Treatment of Tcl events corrected.

<LI>Predicate

<A NAME="IDX244"></A>
<CODE>tcl_eval/3</CODE> now allows the execution of Tcl procedures running multiple Prolog goals. 
<LI>Documentation heavily reworked.

<LI>Fixed unification of prolog goals run from the Tcl side.

</UL>

<LI>Pillow library improved in many senses.


<UL>
<LI>HTTP media type parameter values returned are always strings now, not atoms.

<LI>Changed verbatim() pillow term so that newlines are translated to &#60;br&#62;.

<LI>Changed management of cookies so that special characters in values are correctly handled.

<LI>Added predicate

<A NAME="IDX245"></A>
<CODE>url_query_values/2</CODE>, reversible. Predicate 
<A NAME="IDX246"></A>
<CODE>url_query/2</CODE> now obsolete. 
<LI>Now attribute values in tags are escaped to handle values which have double quotes.

<LI>Improved

<A NAME="IDX247"></A>
<CODE>get_form_input/1</CODE> and 
<A NAME="IDX248"></A>
<CODE>url_query/2</CODE> so that names of parameters having unusual characters are always correctly handled. 
</UL>

<LI>Fixed bug in tokenizer regarding non-terminated single or multiple-line comments. When the last line of a file has a single-line comment and does not end in a newline, it is accepted as correct. When an open-comment /* sequence is not terminated in a file, a syntax error exception is thrown.

</UL>

<LI>Other libraries improved:


<UL>
<LI>Added native_props to assertions package and included

<A NAME="IDX249"></A>
<CODE>nonground/1</CODE>. 
<LI>In atom2terms, changed interpretation of double quoted strings so that they are not parsed to terms.

<LI>Control on exceptions improved.

<LI>Added

<A NAME="IDX250"></A>
<CODE>native/1,2</CODE> to basic_props. 
<LI>Davinci error processing improved.

<LI>Foreign predicates are now automatically declared as implementation-defined.

<LI>In lists, added

<A NAME="IDX251"></A>
<CODE>cross_product/2</CODE> to compute the cartesian product of a list of lists. Also added 
<A NAME="IDX252"></A>
<CODE>delete_non_ground/3</CODE>, enabling deletion of nonground terms from a list. 
<LI>In llists added

<A NAME="IDX253"></A>
<CODE>transpose/2</CODE> and changed 
<A NAME="IDX254"></A>
<CODE>append/2</CODE> implementation with a much more efficient code. 
<LI>The make library has been improved.

<LI>In persdb, added

<A NAME="IDX255"></A>
<CODE>pretractall_fact/1</CODE> and 
<A NAME="IDX256"></A>
<CODE>retractall_fact/1</CODE> as persdb native capabilities. 
<LI>Improved behavior with user environment from persdb.

<LI>In persdb, added support for

<A NAME="IDX257"></A>
<CODE>persistent_dir/4</CODE>, which includes arguments to specify permission modes for persistent directory and files. 
<LI>Some minor updates in persdb_sql.

<LI>Added treatment of operators and module:pred calls to pretty-printer.

<LI>Updated report of read of syntax errors.

<LI>File locking capabilities included in

<A NAME="IDX258"></A>
<CODE>open/3</CODE>. 
<LI>Several improvements in library system.

<LI>New input/output facilities added to sockets.

<LI>Added

<A NAME="IDX259"></A>
<CODE>most_specific_generalization/3</CODE> and 
<A NAME="IDX260"></A>
<CODE>most_general_instance/3</CODE> to terms_check. 
<LI>Added

<A NAME="IDX261"></A>
<CODE>sort_dict/2</CODE> to library vndict. 
<LI>The xref library now treats also empty references.

</UL>

<LI>Miscellaneous updates:


<UL>
<LI>Extended documentation in libraries actmods, arrays, foreign_interface, javall, persdb_mysql, prolog_sys, old_database, and terms_vars.

</UL>

</UL>

<DT><STRONG>Version 1.9 (2002/5/16, 23:17:34 CEST)</STRONG>
<DD>
 New development version after stable 1.8p0 (MCL, DCG)

<DT><STRONG>Version 1.8 (2002/5/16, 21:20:27 CEST)</STRONG>
<DD>
 

<UL>
<LI>Improvements related to supported platforms:


<UL>
<LI>Support for Mac OS X 10.1, based on the Darwin kernel.

<LI>Initial support for compilation on Linux for Power PC (contributed by

<A NAME="IDX262"></A>
<A NAME="IDX263"></A>
<EM>Paulo Moura</EM>). 
<LI>Workaround for incorrect C compilation while using newer (&#62; 2.95) gcc compilers.

<LI>.bat files generated in Windows.

</UL>

<LI>Changes in compiler behavior and user interface:


<UL>
<LI>Corrected a bug which caused wrong code generation in some cases.

<LI>Changed execution of initialization directives. Now the initialization of a module/file never runs before the initializations of the modules from which the module/file imports (excluding circular dependences).

<LI>The engine is more intelligent when looking for an engine to execute bytecode; this caters for a variety of situations when setting explicitly the CIAOLIB environment variable.

<LI>Fixed bugs in the toplevel: behaviour of <CODE>module:main</CODE> calls and initialization of a module (now happens after related modules are loaded).

<LI>Layout char not needed any more to end Prolog files.

<LI>Syntax errors now disable .itf creation, so that they show next time the code is used without change.

<LI>Redefinition warnings now issued only when an unqualified call is seen.

<LI>Context menu in Windows can now load a file into the toplevel.

<LI>Updated Windows installation in order to run CGI executables under Windows: a new information item is added to the registry.

<LI>Added new directories found in recent Linux distributions to INFOPATH.

<LI>Emacs-based environment and debugger improved:


<UL>
<LI>Fixed some errors in embedded debugger.

<LI>Errors located immediataly after code loading.

<LI>Improved ciao-check-types-modes (preprocessor progress now visible).

<LI>Fixed loading regions repeatedly (no more predicate redefinition warnings).

<LI>Added entries in

<A NAME="IDX264"></A>
<CODE>ciaopp</CODE> menu to set verbosity of output. 
<LI>Fixed some additional xemacs compatibility issues (related to searches).

<LI>Errors reported by inferior processes are now explored in forward order (i.e., the first error rewported is the first one highlighted). Improved tracking of errors.

<LI>Specific tool bar now available, with icons for main fuctions (works from emacs 21.1 on). Also, other minor adaptations for working with emacs 21.1 and later.

<LI>Debugger faces are now locally defined (and better customization). This also improves comtability with xemacs (which has different faces).

<LI>Direct access to a common use of the preprocessor (checking modes/types and locating errors) from toolbar.

<LI>Inferior modes for Ciao and CiaoPP improved: contextual help turned on by default.

<LI>Fixes to set-query. Also, previous query now appears in prompt.

<LI>Improved behaviour of stored query.

<LI>Improved behaviour of recentering, finding errors, etc.

<LI>Wait for prompt has better termination characteristics.

<LI>Added new interactive entry points (M-x): ciao, prolog, ciaopp.

<LI>Better tracking of last inferior buffer used.

<LI>Miscellanous bugs removed; some colors changed to adapt to different Emacs versions.

<LI>Fixed some remaining incompatibilities with xemacs.

<LI><CODE>:- doc</CODE> now also supported and highlighted.

<LI>Eliminated need for calendar.el

<LI>Added some missing library directives to fontlock list, organized this better.

</UL>

</UL>

<LI>New libraries added to the system:


<UL>
<LI>hiord: new library which needs to be loaded in order to use higher-order call/N and P(X) syntax. Improved model for predicate abstractions.

<LI>fuzzy: allows representing fuzzy information in the form or Prolog rules.

<LI>use_url: allows loading a module remotely by using a WWW address of the module source code

<LI>andorra: alternative search method where goals which become deterministic at run time are executed before others.

<LI>iterative deepening (id): alternative search method which makes a depth-first search until a predetermined depth is reached. Complete but in general cheaper than breadth first.

<LI>det_hook: allows making actions when a deterministic situation is reached.

<LI>ProVRML: read VRML code and translate it into Prolog terms, and the other way around.

<LI>io_alias_redirection: change where stdin/stdout/stderr point to from within Ciao Prolog programs.

<LI>tcl_tk: an interface to Tcl/Tk programs.

<LI>tcl_tk_obj: object-based interface to Tcl/Tk graphical objects.

<LI>CiaoPP: options to interface with the CiaoPP Prolog preprocessor.

</UL>

<LI>Some libraries greatly improved:


<UL>
<LI>WebDB: utilities to create WWW-based database interfaces.

<LI>Improved java interface implementation (this forced renaming some interface primitives).

<LI>User-transparent persistent predicate database revamped:


<UL>
<LI>Implemented passerta_fact/1 (asserta_fact/1).

<LI>Now it is never necessary to explicitly call init_persdb, a call to initialize_db is only needed after dynamically defining facts of persistent_dir/2. Thus, pcurrent_fact/1 predicate eliminated.

<LI>Facts of persistent predicates included in the program code are now included in the persistent database when it is created. They are ignored in successive executions.

<LI>Files where persistent predicates reside are now created inside a directory named as the module where the persistent predicates are defined, and are named as F_A* for predicate F/A.

<LI>Now there are two packages: persdb and 'persdb/ll' (for low level). In the first, the standard builtins asserta_fact/1, assertz_fact/1, and retract_fact/1 are replaced by new versions which handle persistent data predicates, behaving as usual for normal data predicates. In the second package, predicates with names starting with 'p' are defined, so that there is not overhead in calling the standard builtins.

<LI>Needed declarations for persistent_dir/2 are now included in the packages.

</UL>

<LI>SQL now works with mysql.

<LI>system: expanded to contain more predicates which act as interface to the underlying system / operating system.

</UL>

<LI>Other libraries improved:


<UL>
<LI>xref: creates cross-references among Prolog files.

<LI>concurrency: new predicates to create new concurrent predicates on-the-fly.

<LI>sockets: bugs corrected.

<LI>objects: concurrent facts now properly recognized.

<LI>fast read/write: bugs corrected.

<LI>Added 'webbased' protocol for active modules: publication of active module address can now be made through WWW.

<LI>Predicates in library(dynmods) moved to library(compiler).

<LI>Expansion and meta predicates improved.

<LI>Pretty printing.

<LI>Assertion processing.

<LI>Module-qualified function calls expansion improved.

<LI>Module expansion calls goal expansion even at runtime.

</UL>

<LI>Updates to builtins (there are a few more; these are the most relevant):


<UL>
<LI>Added a prolog_flag to retrieve the version and patch.

<LI>current_predicate/1 in library(dynamic) now enumerates non-engine modules, prolog_sys:current_predicate/2 no longer exists.

<LI>exec/* bug fixed.

<LI>srandom/1 bug fixed.

</UL>

<LI>Updates for C interface:


<UL>
<LI>Fixed bugs in already existing code.

<LI>Added support for creation and traversing of Prolog data structures from C predicates.

<LI>Added support for raising Prolog exceptions from C predicates.

<LI>Preliminary support for calling Prolog from C.

</UL>

<LI>Miscellaneous updates:


<UL>
<LI>Installation made more robust.

<LI>Some pending documentation added.

<LI>'ciao' script now adds (locally) to path the place where it has been installed, so that other programs can be located without being explicitly in the $PATH.

<LI>Loading programs is somewhat faster now.

<LI>Some improvement in printing path names in Windows.

</UL>

</UL>

<DT><STRONG>Version 1.7 (2000/7/12, 19:1:20 CEST)</STRONG>
<DD>
Development version following even 1.6 distribution.

<DT><STRONG>Version 1.6 (2000/7/12, 18:55:50 CEST)</STRONG>
<DD>
 

<UL>
<LI>Source-level debugger in emacs, breakpts.

<LI>Emacs environment improved, added menus for Ciaopp and LPDoc.

<LI>Debugger embeddable in executables.

<LI>Stand-alone executables available for UNIX-like operating systems.

<LI>Many improvements to emacs interface.

<LI>Menu-based interface to autodocumenter.

<LI>Threads now available in Win32.

<LI>Many improvements to threads.

<LI>Modular clp(R) / clp(Q).

<LI>Libraries implementing And-fair breadth-first and iterative deepening included.

<LI>Improved syntax for predicate abstractions.

<LI>Library of higher-order list predicates.

<LI>Better code expansion facilities (macros).

<LI>New delay predicates (when/2).

<LI>Compressed object code/executables on demand.

<LI>The size of atoms is now unbound.

<LI>Fast creation of new unique atoms.

<LI>Number of clauses/predicates essentially unbound.

<LI>Delayed goals with freeze restored.

<LI>Faster compilation and startup.

<LI>Much faster fast write/read.

<LI>Improved documentation.

<LI>Other new libraries.

<LI>Improved installation/deinstallation on all platforms.

<LI>Many improvements to autodocumenter.

<LI>Many bug fixes in libraries and engine.

</UL>

<DT><STRONG>Version 1.5 (1999/11/29, 16:16:23 MEST)</STRONG>
<DD>
Development version following even 1.4 distribution.

<DT><STRONG>Version 1.4 (1999/11/27, 19:0:0 MEST)</STRONG>
<DD>
 

<UL>
<LI>Documentation greatly improved.

<LI>Automatic (re)compilation of foreign files.

<LI>Concurrency primitives revamped; restored &#38;Prolog-like multiengine capability.

<LI>Windows installation and overall operation greatly improved.

<LI>New version of O'Ciao class/object library, with improved performance.

<LI>Added support for "predicate abstractions" in call/N.

<LI>Implemented reexportation through reexport declarations.

<LI>Changed precedence of importations, last one is now higher.

<LI>Modules can now implicitly export all predicates.

<LI>Many minor bugs fixed.

</UL>

<DT><STRONG>Version 1.3 (1999/6/16, 17:5:58 MEST)</STRONG>
<DD>
Development version following even 1.2 distribution.

<DT><STRONG>Version 1.2 (1999/6/14, 16:54:55 MEST)</STRONG>
<DD>
 Temporary version distributed locally for extensive testing of reexportation and other 1.3 features.

<DT><STRONG>Version 1.1 (1999/6/4, 13:30:37 MEST)</STRONG>
<DD>
Development version following even 1.0 distribution.

<DT><STRONG>Version 1.0 (1999/6/4, 13:27:42 MEST)</STRONG>
<DD>
 

<UL>
<LI>Added Tcl/Tk interface library to distribution.

<LI>Added push_prolog_flag/2 and pop_prolog_flag/1 declarations/builtins.

<LI>Filename processing in Windows improved.

<LI>Added redefining/1 declaration to avoid redefining warnings.

<LI>Changed syntax/1 declaration to use_package/1.

<LI>Added add_clause_trans/1 declaration.

<LI>Changed format of .itf files such that a '+' stands for all the standard imports from engine, which are included in c_itf source internally (from engine(builtin_exports)). Further changes in itf data handling, so that once an .itf file is read in a session, the file is cached and next time it is needed no access to the file system is required.

<LI>Many bugs fixed.

</UL>

<DT><STRONG>Version 0.9 (1999/3/10, 17:3:49 CET)</STRONG>
<DD>
 

<UL>
<LI>Test version before 1.0 release. Many bugs fixed.

</UL>

<DT><STRONG>Version 0.8 (1998/10/27, 13:12:36 MET)</STRONG>
<DD>
 

<UL>
<LI>Changed compiler so that only one pass is done, eliminated <CODE>.dep</CODE> files.

<LI>New concurrency primitives.

<LI>Changed assertion comment operator to #.

<LI>Implemented higher-order with call/N.

<LI>Integrated SQL-interface to external databases with persistent predicate concept.

<LI>First implementation of object oriented programming package.

<LI>Some bugs fixed.

</UL>

<DT><STRONG>Version 0.7 (1998/9/15, 12:12:33 MEST)</STRONG>
<DD>
 

<UL>
<LI>Improved debugger capabilities and made easier to use.

<LI>Simplified assertion format.

<LI>New arithmetic functions added, which complete all ISO functions.

<LI>Some bugs fixed.

</UL>

<DT><STRONG>Version 0.6 (1998/7/16, 21:12:7 MET DST)</STRONG>
<DD>
 

<UL>
<LI>Defining other path aliases (in addition to 'library') which can be loaded dynamically in executables is now possible.

<LI>Added the posibility to define multifile predicates in the shell.

<LI>Added the posibility to define dynamic predicates dynamically.

<LI>Added addmodule meta-argument type.

<LI>Implemented persistent data predicates.

<LI>New version of PiLLoW WWW library (XML, templates, etc.).

<LI>Ported active modules from "distributed Ciao" (independent development version of Ciao).

<LI>Implemented lazy loading in executables.

<LI>Modularized engine(builtin).

<LI>Some bugs fixed.

</UL>

<DT><STRONG>Version 0.5 (1998/3/23)</STRONG>
<DD>
 

<UL>
<LI>First Windows version.

<LI>Integrated debugger in toplevel.

<LI>Implemented DCG's as (Ciao-style) expansions.

<LI>Builtins renamed to match ISO-Prolog.

<LI>Made ISO the default syntax/package.

</UL>

<DT><STRONG>Version 0.4 (1998/2/24)</STRONG>
<DD>
 

<UL>
<LI>First version with the new Ciao emacs mode.

<LI>Full integration of concurrent engine and compiler/library.

<LI>Added new_declaration/1 directive.

<LI>Added modular syntax enhancements.

<LI>Shell script interpreter separated from toplevel shell.

<LI>Added new compilation warnings.

</UL>

<DT><STRONG>Version 0.3 (1997/8/20)</STRONG>
<DD>
 

<UL>
<LI>Ciao builtins modularized.

<LI>New prolog flags can be defined by libraries.

<LI>Standalone comand-line compiler available, with automatic "make".

<LI>Added assertions and regular types.

<LI>First version using the automatic documentation generator.

</UL>

<DT><STRONG>Version 0.2 (1997/4/16)</STRONG>
<DD>
 

<UL>
<LI>First module system implemented.

<LI>Implemented exceptions using catch/3 and throw/1.

<LI>Added functional &#38; record syntax.

<LI>Added modular sentence, term, and goal translations.

<LI>Implemented attributed variables.

<LI>First CLPQ/CLPR implementation.

<LI>Added the posibility of linking external .so files.

<LI>Changes in syntax to allow <CODE>P(X)</CODE> and <CODE>"string"||L</CODE>.

<LI>Changed to be more similar to ISO-Prolog.

<LI>Implemented Prolog shell scripts.

<LI>Implemented data predicates.

</UL>

<DT><STRONG>Version 0.1 (1997/2/13)</STRONG>
<DD>
First fully integrated, standalone Ciao distribution. Based on integrating into an evolution of the &#38;-Prolog engine/libraries/preprocessor [Her86,HG91] many functionalities from several previous independent development versions of Ciao [HC93,HC94,HCC95,Bue95,CLI95,HBdlBP95,HBC96,CHV96b,HBC99]. 

</DL>

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