Add missing documentation
This commit is contained in:
parent
8c7c258492
commit
77a5090276
@ -15,11 +15,13 @@
|
|||||||
* comments: comparing two prolog terms *
|
* comments: comparing two prolog terms *
|
||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
/// @file cmppreds.c
|
/// @file cmppreds.c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup Comparing_Terms Comparing Terms
|
/**
|
||||||
|
@defgroup Comparing_Terms Comparing Terms
|
||||||
@ingroup builtins
|
@ingroup builtins
|
||||||
|
|
||||||
The following predicates are used to compare and order terms, using the
|
The following predicates are used to compare and order terms, using the
|
||||||
@ -29,8 +31,7 @@ standard ordering:
|
|||||||
variables come before numbers, numbers come before atoms which in turn
|
variables come before numbers, numbers come before atoms which in turn
|
||||||
come before compound terms, i.e.: variables @< numbers @< atoms @<
|
come before compound terms, i.e.: variables @< numbers @< atoms @<
|
||||||
compound terms.
|
compound terms.
|
||||||
+
|
+ Variables are roughly ordered by "age" (the "oldest" variable is put
|
||||||
Variables are roughly ordered by "age" (the "oldest" variable is put
|
|
||||||
first);
|
first);
|
||||||
+
|
+
|
||||||
Floating point numbers are sorted in increasing order;
|
Floating point numbers are sorted in increasing order;
|
||||||
|
18
C/mavar.c
18
C/mavar.c
@ -16,9 +16,13 @@
|
|||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup Term_Modification Term Modification
|
/**
|
||||||
|
|
||||||
|
@file mavar.c
|
||||||
|
|
||||||
|
@defgroup Term_Modification Term Modification
|
||||||
@ingroup builtins
|
@ingroup builtins
|
||||||
@{
|
|
||||||
|
|
||||||
It is sometimes useful to change the value of instantiated
|
It is sometimes useful to change the value of instantiated
|
||||||
variables. Although, this is against the spirit of logic programming, it
|
variables. Although, this is against the spirit of logic programming, it
|
||||||
@ -26,14 +30,14 @@ is sometimes useful. As in other Prolog systems, YAP has
|
|||||||
several primitives that allow updating Prolog terms. Note that these
|
several primitives that allow updating Prolog terms. Note that these
|
||||||
primitives are also backtrackable.
|
primitives are also backtrackable.
|
||||||
|
|
||||||
The `setarg/3` primitive allows updating any argument of a Prolog
|
The setarg/3 primitive allows updating any argument of a Prolog
|
||||||
compound terms. The `mutable` family of predicates provides
|
compound terms. The _mutable_ family of predicates provides
|
||||||
<em>mutable variables</em>. They should be used instead of `setarg/3`,
|
<em>mutable variables</em>. They should be used instead of setarg/3,
|
||||||
as they allow the encapsulation of accesses to updatable
|
as they allow the encapsulation of accesses to updatable
|
||||||
variables. Their implementation can also be more efficient for long
|
variables. Their implementation can also be more efficient for long
|
||||||
deterministic computations.
|
deterministic computations.
|
||||||
|
|
||||||
|
@{
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -315,7 +319,6 @@ p_update_mutable( USES_REGS1 )
|
|||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
|
||||||
/** @pred is_mutable(? _D_)
|
/** @pred is_mutable(? _D_)
|
||||||
|
|
||||||
|
|
||||||
@ -323,6 +326,7 @@ Holds if _D_ is a mutable term.
|
|||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
static Int
|
||||||
p_is_mutable( USES_REGS1 )
|
p_is_mutable( USES_REGS1 )
|
||||||
{
|
{
|
||||||
Term t = Deref(ARG1);
|
Term t = Deref(ARG1);
|
||||||
|
28
docs/yap.md
28
docs/yap.md
@ -774,6 +774,8 @@ YAP Built-ins {#builtins}
|
|||||||
+ @ref YAP_Terms
|
+ @ref YAP_Terms
|
||||||
|
|
||||||
+ @ref InputOutput
|
+ @ref InputOutput
|
||||||
|
|
||||||
|
+ @ref AbsoluteFileName
|
||||||
|
|
||||||
+ @ref YAPOS
|
+ @ref YAPOS
|
||||||
|
|
||||||
@ -806,6 +808,9 @@ language. Next, we discuss how to use the most important ones.
|
|||||||
The YAP Library {#library}
|
The YAP Library {#library}
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
@defgroup library YAP library files
|
||||||
|
@{
|
||||||
|
|
||||||
Library files reside in the library_directory path (set by the
|
Library files reside in the library_directory path (set by the
|
||||||
`LIBDIR` variable in the Makefile for YAP). Several files in the
|
`LIBDIR` variable in the Makefile for YAP). Several files in the
|
||||||
library are originally from the public-domain Edinburgh Prolog library.
|
library are originally from the public-domain Edinburgh Prolog library.
|
||||||
@ -861,10 +866,14 @@ The YAP Library {#library}
|
|||||||
- @ref wgraphs
|
- @ref wgraphs
|
||||||
- @ref wundgraphs
|
- @ref wundgraphs
|
||||||
- @ref ypp
|
- @ref ypp
|
||||||
|
@}
|
||||||
|
|
||||||
The YAP Packages {#packages}
|
The YAP Packages {#packages}
|
||||||
================
|
================
|
||||||
|
|
||||||
|
@defgroup packages YAP packages files
|
||||||
|
@{
|
||||||
|
|
||||||
+ @ref real
|
+ @ref real
|
||||||
|
|
||||||
+ @ref BDDs
|
+ @ref BDDs
|
||||||
@ -891,10 +900,16 @@ Leuven packages ported from SWI-Prolog:
|
|||||||
|
|
||||||
+ @subpage clpqr
|
+ @subpage clpqr
|
||||||
|
|
||||||
|
@}
|
||||||
|
|
||||||
Compatibility {#swi}
|
Compatibility {#swi}
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
||||||
|
@defgroup swi Compatibility
|
||||||
|
@{
|
||||||
|
|
||||||
|
|
||||||
YAP has been designed to be as compatible as possible with other
|
YAP has been designed to be as compatible as possible with other
|
||||||
Prolog systems, originally with C-Prolog\cite x and SICStus
|
Prolog systems, originally with C-Prolog\cite x and SICStus
|
||||||
Prolog~\cite x . More recent work on YAP has striven at making YAP
|
Prolog~\cite x . More recent work on YAP has striven at making YAP
|
||||||
@ -1075,9 +1090,15 @@ architectures. Otherwise, YAP follows IEEE arithmetic.
|
|||||||
Please inform the authors on other incompatibilities that may still
|
Please inform the authors on other incompatibilities that may still
|
||||||
exist.
|
exist.
|
||||||
|
|
||||||
|
@}
|
||||||
|
|
||||||
Foreign Language interface for YAP {#fli}
|
Foreign Language interface for YAP {#fli}
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
|
@defgroup fli Foreigd Code Interfacing
|
||||||
|
|
||||||
|
@{
|
||||||
|
|
||||||
YAP provides the user with three facilities for writing
|
YAP provides the user with three facilities for writing
|
||||||
predicates in a language other than Prolog. Under Unix systems,
|
predicates in a language other than Prolog. Under Unix systems,
|
||||||
most language implementations were linkable to `C`, and the first interface exported the YAP machinery to the C language. YAP also implements most of the SWI-Prolog foreign language interface.
|
most language implementations were linkable to `C`, and the first interface exported the YAP machinery to the C language. YAP also implements most of the SWI-Prolog foreign language interface.
|
||||||
@ -1088,4 +1109,9 @@ being designed to work with the swig (www.swig.orgv) interface compiler.
|
|||||||
|
|
||||||
+ The @ref swi-c-interface emulates Jan Wielemaker's SWI foreign language interface.
|
+ The @ref swi-c-interface emulates Jan Wielemaker's SWI foreign language interface.
|
||||||
|
|
||||||
+ The @ref yap-cplus-interface is desiged to interface with the SWI ackage \cite x Object-Oriented systems.
|
+ The @ref yap-cplus-interface is desiged to interface with the SWIG package by using Object-Oriented concepts
|
||||||
|
|
||||||
|
+ The @ref LoadInterface handles the setup of foreign files
|
||||||
|
|
||||||
|
@}
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@ static char SccsId[] = "%W% %G%";
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group
|
* @defgroup Aliases
|
||||||
*
|
* @ingroup InputOutput
|
||||||
*
|
*
|
||||||
* Aliases:
|
* Aliases:
|
||||||
* This file defines the main operations on aliases, a second name for a file. Aliases are always
|
* This file defines the main operations on aliases, a second name for a file. Aliases are always
|
||||||
|
@ -601,7 +601,7 @@ static Int put_char(USES_REGS1) { /* '$put'(Stream,N) */
|
|||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred tab(+ _N_)
|
/** @pred tab_1(+ _N_)
|
||||||
|
|
||||||
|
|
||||||
Outputs _N_ spaces to the current output stream.
|
Outputs _N_ spaces to the current output stream.
|
||||||
|
@ -31,6 +31,10 @@ static char SccsId[] = "%W% %G%";
|
|||||||
|
|
||||||
|
|
||||||
/// @addtogroup CharProps
|
/// @addtogroup CharProps
|
||||||
|
/**
|
||||||
|
* @defgroup CharIO Character-Based Input/Output
|
||||||
|
* @ingroup InputOutput
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file includes the definition of a character properties.
|
* This file includes the definition of a character properties.
|
||||||
|
28
os/console.c
28
os/console.c
@ -18,9 +18,20 @@
|
|||||||
static char SccsId[] = "%W% %G%";
|
static char SccsId[] = "%W% %G%";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file console.c
|
||||||
|
* @author VITOR SANTOS COSTA <vsc@VITORs-MBP.lan>
|
||||||
|
* @date Wed Jan 20 00:56:23 2016
|
||||||
|
*
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
* This file includes the interface to the console IO, tty style. Refer also to the readline library.
|
* This file includes the interface to the console IO, tty style. Refer also to the readline library.
|
||||||
*
|
* @defgroup console Support for console-based interaction.
|
||||||
|
* @ingroup InputOutput
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Yap.h"
|
#include "Yap.h"
|
||||||
@ -181,6 +192,13 @@ ConsoleGetc(int sno)
|
|||||||
return console_post_process_read_char(ch, s);
|
return console_post_process_read_char(ch, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @pred prompt1(+ _A__)
|
||||||
|
|
||||||
|
|
||||||
|
Changes YAP input prompt for the .
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
prompt1 ( USES_REGS1 )
|
prompt1 ( USES_REGS1 )
|
||||||
@ -198,7 +216,13 @@ prompt1 ( USES_REGS1 )
|
|||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @pred prompt(- _A_,+ _B_)
|
||||||
|
|
||||||
|
|
||||||
|
Changes YAP input prompt from _A_ to _B_, active on *next* standard input interaction.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
static Int
|
static Int
|
||||||
prompt ( USES_REGS1 )
|
prompt ( USES_REGS1 )
|
||||||
{ /* prompt(Old,New) */
|
{ /* prompt(Old,New) */
|
||||||
@ -211,7 +235,7 @@ prompt ( USES_REGS1 )
|
|||||||
a = AtomOfTerm (t);
|
a = AtomOfTerm (t);
|
||||||
if (strlen(RepAtom (a)->StrOfAE) > MAX_PROMPT) {
|
if (strlen(RepAtom (a)->StrOfAE) > MAX_PROMPT) {
|
||||||
Yap_Error(SYSTEM_ERROR_INTERNAL,t,"prompt %s is too long", RepAtom (a)->StrOfAE);
|
Yap_Error(SYSTEM_ERROR_INTERNAL,t,"prompt %s is too long", RepAtom (a)->StrOfAE);
|
||||||
return(FALSE);
|
return false;
|
||||||
}
|
}
|
||||||
strncpy(LOCAL_Prompt, (char *)RepAtom (LOCAL_AtPrompt)->StrOfAE, MAX_PROMPT);
|
strncpy(LOCAL_Prompt, (char *)RepAtom (LOCAL_AtPrompt)->StrOfAE, MAX_PROMPT);
|
||||||
LOCAL_AtPrompt = a;
|
LOCAL_AtPrompt = a;
|
||||||
|
81
os/edio.yap
81
os/edio.yap
@ -1,7 +1,37 @@
|
|||||||
%
|
%
|
||||||
% Edinburgh IO.
|
% Edinburgh IO.
|
||||||
|
/**
|
||||||
|
* @file edio.yap
|
||||||
|
* @author VITOR SANTOS COSTA <vsc@VITORs-MBP.lan>
|
||||||
|
* @date Wed Jan 20 01:07:02 2016
|
||||||
|
*
|
||||||
|
* @brief Input/Output according to the DEC-10 Prolog. PLease consider using the ISO
|
||||||
|
* standard predicates for new code.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
%
|
%
|
||||||
|
|
||||||
|
/** @pred see(+ _S_)
|
||||||
|
|
||||||
|
|
||||||
|
If _S_ is a currently opened input stream then it is assumed to be
|
||||||
|
the current input stream. If _S_ is an atom it is taken as a
|
||||||
|
filename. If there is no input stream currently associated with it, then
|
||||||
|
it is opened for input, and the new input stream thus created becomes
|
||||||
|
the current input stream. If it is not possible to open the file, an
|
||||||
|
error occurs. If there is a single opened input stream currently
|
||||||
|
associated with the file, it becomes the current input stream; if there
|
||||||
|
are more than one in that condition, then one of them is chosen.
|
||||||
|
|
||||||
|
When _S_ is a stream not currently opened for input, an error may be
|
||||||
|
reported, depending on the state of the `file_errors` flag. If
|
||||||
|
_S_ is neither a stream nor an atom the predicates just fails.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
see(user) :- !, set_input(user_input).
|
see(user) :- !, set_input(user_input).
|
||||||
see(F) :- var(F), !,
|
see(F) :- var(F), !,
|
||||||
'$do_error'(instantiation_error,see(F)).
|
'$do_error'(instantiation_error,see(F)).
|
||||||
@ -13,6 +43,13 @@ see(Stream) :- '$stream'(Stream), current_stream(_,read,Stream), !,
|
|||||||
set_input(Stream).
|
set_input(Stream).
|
||||||
see(F) :- open(F,read,Stream), set_input(Stream).
|
see(F) :- open(F,read,Stream), set_input(Stream).
|
||||||
|
|
||||||
|
/** @pred seeing(- _S_)
|
||||||
|
|
||||||
|
|
||||||
|
The current input stream is unified with _S_.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
seeing(File) :- current_input(Stream),
|
seeing(File) :- current_input(Stream),
|
||||||
stream_property(Stream,file_name(NFile)),
|
stream_property(Stream,file_name(NFile)),
|
||||||
(
|
(
|
||||||
@ -23,8 +60,33 @@ seeing(File) :- current_input(Stream),
|
|||||||
NFile = File
|
NFile = File
|
||||||
).
|
).
|
||||||
|
|
||||||
|
/** @pred seen
|
||||||
|
|
||||||
|
|
||||||
|
Closes the current input stream, as opened by see/1. Standard input
|
||||||
|
stream goes to the original ùser_input`.
|
||||||
|
|
||||||
|
*/
|
||||||
seen :- current_input(Stream), close(Stream), set_input(user).
|
seen :- current_input(Stream), close(Stream), set_input(user).
|
||||||
|
|
||||||
|
/** @pred tell(+ _S_)
|
||||||
|
|
||||||
|
|
||||||
|
If _S_ is a currently opened stream for output, it becomes the
|
||||||
|
current output stream. If _S_ is an atom it is taken to be a
|
||||||
|
filename. If there is no output stream currently associated with it,
|
||||||
|
then it is opened for output, and the new output stream created becomes
|
||||||
|
the current output stream. If it is not possible to open the file, an
|
||||||
|
error occurs. If there is a single opened output stream currently
|
||||||
|
associated with the file, then it becomes the current output stream; if
|
||||||
|
there are more than one in that condition, one of them is chosen.
|
||||||
|
|
||||||
|
Whenever _S_ is a stream not currently opened for output, an error
|
||||||
|
may be reported, depending on the state of the file_errors flag. The
|
||||||
|
predicate just fails, if _S_ is neither a stream nor an atom.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
tell(user) :- !, set_output(user_output).
|
tell(user) :- !, set_output(user_output).
|
||||||
tell(F) :- var(F), !,
|
tell(F) :- var(F), !,
|
||||||
'$do_error'(instantiation_error,tell(F)).
|
'$do_error'(instantiation_error,tell(F)).
|
||||||
@ -43,12 +105,29 @@ tell(Stream) :-
|
|||||||
tell(F) :-
|
tell(F) :-
|
||||||
open(F,append,Stream),
|
open(F,append,Stream),
|
||||||
set_output(Stream).
|
set_output(Stream).
|
||||||
|
|
||||||
|
/** @pred telling(- _S_)
|
||||||
|
|
||||||
|
|
||||||
|
The current output stream is unified with _S_.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
telling(File) :-
|
telling(File) :-
|
||||||
current_output(Stream),
|
current_output(Stream),
|
||||||
stream_property(Stream,file_name(NFile)),
|
stream_property(Stream,file_name(NFile)),
|
||||||
( stream_property(user_output,file_name(NFile)) -> File = user ; File = NFile ).
|
( stream_property(user_output,file_name(NFile)) -> File = user ; File = NFile ).
|
||||||
|
|
||||||
|
/** @pred told
|
||||||
|
|
||||||
|
|
||||||
|
Closes the current output stream, and the user's terminal becomes again
|
||||||
|
the current output stream. It is important to remember to close streams
|
||||||
|
after having finished using them, as the maximum number of
|
||||||
|
simultaneously opened streams is 17.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
told :- current_output(Stream),
|
told :- current_output(Stream),
|
||||||
!,
|
!,
|
||||||
set_output(user),
|
set_output(user),
|
||||||
|
@ -239,6 +239,7 @@ Yap_GetStreamHandle(Term t)
|
|||||||
|
|
||||||
#define YAP_ERROR NIL
|
#define YAP_ERROR NIL
|
||||||
|
|
||||||
|
/// maximum number of open streams
|
||||||
#define MaxStreams 64
|
#define MaxStreams 64
|
||||||
|
|
||||||
#define EXPAND_FILENAME 0x000080
|
#define EXPAND_FILENAME 0x000080
|
||||||
|
Reference in New Issue
Block a user