doc updates

This commit is contained in:
Vítor Santos Costa 2014-04-09 12:39:52 +01:00
parent a8c77d2609
commit c629ae9283
10 changed files with 329 additions and 242 deletions

View File

@ -32,7 +32,7 @@ Built-ins, Debugging, Syntax, Top
@end menu
@node Control, Undefined Procedures, , Top
@section Control Predicates
@chapter Control Predicates
This chapter describes the predicates for controlling the execution of
@ -93,13 +93,13 @@ Succeeds once.
@findex fail/0
@syindex fail/0
@cyindex fail/0
Fails always.
Always fails.
@item false [ISO]
@findex false/0
@syindex false/0
@cnindex false/0
The same as fail
The same as fail.
@item ! [ISO]
@findex !/0
@ -698,7 +698,7 @@ Translates a message-term into a string object. Primarily intended for SWI-Prolo
@end table
@node Testing Terms, Predicates on Atoms, Messages, Top
@section Predicates on terms
@chapter Predicates on terms
@table @code
@ -1457,6 +1457,7 @@ conversion of integers to floating point numbers may raise an overflow
exception. In all other cases, arguments are converted to the same type
using the order integer to rational number to floating point number.
@subsection Arithmetic Expressions
Arithmetic expressions in YAP may use the following operators or
@i{evaluable predicates}:
@ -1762,6 +1763,8 @@ A "random" floating point number between 0 and 1.
@end table
@subsection Arithmetic Primitives
The primitive YAP predicates involving arithmetic expressions are:
@table @code
@ -1846,6 +1849,7 @@ will generate an exception. If no error handler is available, execution
will be thrown back to the top-level.
@end itemize
@subsection Counting
The following predicates provide counting:
@ -1909,7 +1913,7 @@ The following predicates provide counting:
@end table
@node I/O, Database, Arithmetic, Top
@section I/O Predicates
@chapter I/O Predicates
Some of the I/O predicates described below will in certain conditions
provide error messages and abort only if the file_errors flag is set.
@ -1931,7 +1935,7 @@ Subnodes of Input/Output
@end menu
@node Streams and Files, C-Prolog File Handling, , I/O
@subsection Handling Streams and Files
@section Handling Streams and Files
@table @code
@ -2354,8 +2358,8 @@ Given the packaged stream position term @var{StreamPosition}, unify
@end table
@node C-Prolog File Handling, I/O of Terms, Streams and Files, I/O
@subsection Handling Streams and Files
@section C-Prolog File Handling
@table @code
@item tell(+@var{S})
@ -2422,7 +2426,7 @@ Closes the current input stream (see 6.7.).
@end table
@node I/O of Terms, I/O of Characters, C-Prolog File Handling, I/O
@subsection Handling Input/Output of Terms
@section Handling Input/Output of Terms
@table @code
@ -2770,11 +2774,8 @@ The next example shows how to align columns and padding. We first show
left-alignment:
@example
@code{
?- format("~n*Hello~16+*~n",[]).
*Hello *
}
@end example
Note that we reserve 16 characters for the column.
@ -2783,10 +2784,8 @@ The following example shows how to do right-alignment:
@example
@code{
?- format("*~tHello~16+*~n",[]).
* Hello*
}
@end example
@ -2796,10 +2795,8 @@ The @code{~t} escape sequence forces filling before @code{Hello}.
We next show how to do centering:
@example
@code{
?- format("*~tHello~t~16+*~n",[]).
* Hello *
}
@end example
@ -2865,7 +2862,7 @@ X = [104, 101, 108, 108, 111]
@end table
@node I/O of Characters, I/O for Streams, I/O of Terms, I/O
@subsection Handling Input/Output of Characters
@section Handling Input/Output of Characters
@table @code
@ -2994,7 +2991,7 @@ Outputs a new line to the current output stream.
@end table
@node I/O for Streams, C-Prolog to Terminal, I/O of Characters, I/O
@subsection Input/Output Predicates applied to Streams
@section Input/Output Predicates applied to Streams
@table @code
@ -3026,13 +3023,6 @@ stream.
Displays term @var{T} on the stream @var{S}. Atoms are quoted when
necessary, and operators are ignored.
@item write_canonical(+@var{T}) [ISO]
@findex write_canonical/1
@syindex write_canonical/1
@cnindex write_canonical/1
Displays term @var{T}. Atoms are quoted when necessary, and operators
are ignored.
@item write_term(+@var{S}, +@var{T}, +@var{Opts}) [ISO]
@findex write_term/3
@syindex write_term/3
@ -3167,7 +3157,7 @@ Outputs a new line to stream @var{S}.
@end table
@node C-Prolog to Terminal, I/O Control, I/O for Streams, I/O
@subsection Compatible C-Prolog predicates for Terminal I/O
@section Compatible C-Prolog predicates for Terminal I/O
@table @code
@ -3211,7 +3201,7 @@ Outputs a new line to stream @code{user_output}.
@end table
@node I/O Control, Sockets, C-Prolog to Terminal, I/O
@subsection Controlling Input/Output
@section Controlling Input/Output
@table @code
@ -3248,7 +3238,7 @@ interactive control from a pipe or a socket.
@end table
@node Sockets, , I/O Control, I/O
@subsection Using Sockets From YAP
@section Using Sockets From YAP
YAP includes a SICStus Prolog compatible socket interface. In YAP-6.3
this uses the @c{clib} package to emulate the old low level interface that
@ -3345,11 +3335,6 @@ integer @var{LENGTH} gives the queue limit for incoming connections,
and should be limited to @code{5} for portable applications. The socket
must be of type @code{SOCK_STREAM} or @code{SOCK_SEQPACKET}.
@item socket_accept(+@var{SOCKET}, -@var{STREAM})
@findex socket_accept/2
@syindex socket_accept/2
@cnindex socket_accept/2
@item socket_accept(+@var{SOCKET}, -@var{CLIENT}, -@var{STREAM})
@findex socket_accept/3
@syindex socket_accept/3
@ -3412,7 +3397,7 @@ address in number and dots notation.
@end table
@node Database, Sets, I/O, Top
@section Using the Clausal Data Base
@chapter Using the Clausal Data Base
Predicates in YAP may be dynamic or static. By default, when
consulting or reconsulting, predicates are assumed to be static:
@ -3496,7 +3481,7 @@ Subnodes of Database
@end table
@node Modifying the Database, Looking at the Database, , Database
@subsection Modification of the Data Base
@section Modification of the Data Base
These predicates can be used either for static or for dynamic
predicates:
@ -3639,7 +3624,7 @@ Retract all the clauses whose head matches the goal @var{G}. Goal
@end table
@node Looking at the Database, Database References, Modifying the Database, Database
@subsection Looking at the Data Base
@section Looking at the Data Base
@table @code
@ -3734,7 +3719,7 @@ public.
@findex tabled/0 (predicate_property flag)
true if the predicate is tabled; note that only static predicates can
be tabled in YAP.
@item source
@item source (predicate_property flag)
@findex source/0 (predicate_property flag)
true if source for the predicate is available.
@item number_of_clauses(@var{ClauseCount})
@ -3762,7 +3747,7 @@ of space required to store indices to those clauses (in bytes).
@end table
@node Database References, Internal Database, Looking at the Database, Database
@subsection Using Data Base References
@section Using Data Base References
Data Base references are a fast way of accessing terms. The predicates
@code{erase/1} and @code{instance/1} also apply to these references and may
@ -3812,6 +3797,7 @@ database reference is @var{R}. The predicate must be dynamic.
@node Internal Database, BlackBoard, Database References, Database
@section Internal Data Base
Some programs need global information for, e.g. counting or collecting
data obtained by backtracking. As a rule, to keep this information, the
internal data base should be used instead of asserting and retracting
@ -3871,6 +3857,9 @@ If a term equal to @var{T} up to variable renaming is stored under key
@var{K} fail. Otherwise, make term @var{T} the first record under key
@var{K} and unify @var{R} with its reference.
This predicate is YAP specific.
@item recorded(+@var{K},@var{T},@var{R})
@findex recorded/3
@saindex recorded/3
@ -3990,26 +3979,6 @@ counter.
@noindent
This predicate is YAP specific.
@item recordzifnot(+@var{K},@var{T},-@var{R})
@findex recordzifnot/3
@snindex recordzifnot/3
@cnindex recordzifnot/3
If a variant of @var{T} is stored under key @var{K} fail. Otherwise, make
term @var{T} the last record under key @var{K} and unify @var{R} with its
reference.
This predicate is YAP specific.
@item recordaifnot(+@var{K},@var{T},-@var{R})
@findex recordaifnot/3
@snindex recordaifnot/3
@cnindex recordaifnot/3
If a variant of @var{T} is stored under key @var{K} fail. Otherwise, make
term @var{T} the first record under key @var{K} and unify @var{R} with its
reference.
This predicate is YAP specific.
@end table
There is a strong analogy between the i.d.b. and the way dynamic
@ -4237,7 +4206,7 @@ no
@end table
@node Grammars, OS, Sets, Top
@section Grammar Rules
@chapter Grammar Rules
Grammar rules in Prolog are both a convenient way to express definite
clause grammars and an extension of the well known context-free grammars.
@ -4353,7 +4322,7 @@ This predicate is used by the grammar rules compiler and is defined as
@end table
@node OS, Term Modification, Grammars, Top
@section Access to Operating System Functionality
@chapter Access to Operating System Functionality
The following built-in predicates allow access to underlying
Operating System functionality:
@ -4582,7 +4551,7 @@ order of dispatch.
@end table
@node Term Modification, Global Variables, OS, Top
@section Term Modification
@chapter Term Modification
@cindex updating terms
It is sometimes useful to change the value of instantiated
@ -4612,12 +4581,6 @@ Set the value of the @var{I}th argument of term @var{S} to term @var{T}.
@cnindex create_mutable/2
Create new mutable variable @var{M} with initial value @var{D}.
@item get_mutable(?@var{D},+@var{M})
@findex get_mutable/2
@syindex get_mutable/2
@cnindex get_mutable/2
Unify the current value of mutable term @var{M} with term @var{D}.
@item is_mutable(?@var{D})
@findex is_mutable/1
@syindex is_mutable/1
@ -4638,7 +4601,7 @@ Set the current value of mutable term @var{M} to term @var{D}.
@end table
@node Global Variables, Profiling, Term Modification, Top
@section Global Variables
@chapter Global Variables
@cindex global variables
@ -4844,7 +4807,7 @@ compound terms.
@node Profiling, Call Counting, Global Variables, Top
@section Profiling Prolog Programs
@chapter Profiling Prolog Programs
@cindex profiling
@ -4860,7 +4823,7 @@ The YAP profiling sub-system is currently under
development. Functionality for this sub-system will increase with newer
implementation.
@subsection The Count Profiler
@section The Count Profiler
@strong{Notes:}
@ -4928,7 +4891,8 @@ Reset all profiling information.
@end table
@subsection Tick Profiler
@section Tick Profiler
The tick profiler works by interrupting the Prolog code every so often
and checking at each point the code was. The profiler must be able to
retrace the state of the abstract machine at every moment. The major
@ -4977,7 +4941,7 @@ Show profiling info for the top-most @var{N} predicates.
The @code{showprofres/0} and @code{showprofres/1} predicates call a user-defined multifile hook predicate, @code{user:prolog_predicate_name/2}, that can be used for converting a possibly explicitly-qualified callable term into an atom that will used when printing the profiling information.
@node Call Counting, Arrays, Profiling, Top
@section Counting Calls
@chapter Counting Calls
@cindex Counting Calls
Predicates compiled with YAP's flag @code{call_counting} set to
@ -5053,7 +5017,7 @@ exception when @code{l/0} performs more than 10000 reductions.
@node Arrays, Preds, Call Counting , Top
@section Arrays
@chapter Arrays
The YAP system includes experimental support for arrays. The
support is enabled with the option @code{YAP_ARRAYS}.
@ -5262,7 +5226,7 @@ terms.
@end table
@node Preds, Misc, Arrays, Top
@section Predicate Information
@chapter Predicate Information
Built-ins that return information on the current predicates and modules:
@ -5286,7 +5250,7 @@ Succeeds if @var{M} are current modules associated to the file @var{F}.
@end table
@node Misc, , Preds, Top
@section Miscellaneous
@chapter Miscellaneous
@table @code
@ -6107,7 +6071,7 @@ filed are ignored.
@*
Current source module.
@item source
@item source (prolog_load_context/2 option)
@findex file (prolog_load_context/2 option)
@*
Full name for the file currently being read in, which may be consulted,

View File

@ -42,8 +42,8 @@ standard info directory.
predefined directory.
@end enumerate
In most systems you will need to be superuser in order to do @command{make
install} and @command{make info} on the standard directories.
In most systems you will need to be superuser in order to do
@command{make install} and @command{make info} on the standard directories.
@node Configuration Options, Machine Options, ,Install
@section Tuning the Functionality of YAP
@ -301,8 +301,7 @@ fetch these files from @var{$YAPSRC\VC\include}.
set @code{Project Type} to @code{Release}
@item To use YAP's own include directories you have to set the Project
option @code{Project.Project Settings.C/C++.Preprocessor.Additional
Include Directories} to include the directories @var{$YAPSRC\H},
option @code{Project.Project Settings.C/C++.Preprocessor.Additional Include Directories} to include the directories @var{$YAPSRC\H},
@var{$YAPSRC\VC\include}, @var{$YAPSRC\OPTYAP} and
@var{$YAPSRC\include}. The syntax is:

View File

@ -20,7 +20,7 @@ Loading Programs
@table @code
@item consult(@var{+F})
@item consult(+@var{F})
@findex consult/1
@snindex consult/1
@cyindex consult/1
@ -31,7 +31,7 @@ In YAP @code{consult/1} does not remove previous clauses for
the procedures defined in @var{F}. Moreover, note that all code in YAP
is compiled.
@item reconsult(@var{+F})
@item reconsult(+@var{F})
@findex reconsult/1
@snindex reconsult/1
@cyindex reconsult/1
@ -39,13 +39,13 @@ Updates the program replacing the
previous definitions for the predicates defined in @var{F}.
@item [@var{+F}]
@item [+@var{F}]
@findex nil/1
@saindex []/1
@cyindex []/1
The same as @code{consult(F)}.
@item [-@var{+F}]
@item [-+@var{F}]
@findex dash_nil/1
@saindex [-]/1
@cyindex [-]/1
@ -60,14 +60,14 @@ Example:
will consult @code{file1} @code{file4} and reconsult @code{file2} and
@code{file3}.
@item compile(@var{+F})
@item compile(+@var{F})
@findex compile/1
@syindex compile/1
@cnindex compile/1
@noindent
In YAP, the same as @code{reconsult/1}.
@item load_files(@var{+Files}, @var{+Options})
@item load_files(+@var{Files}, +@var{Options})
@findex load_files/2
@syindex load_files/2
@cnindex load_files/2
@ -138,7 +138,7 @@ supported encodings.
is @code{exo}, these are facts with atoms and integers that need a very compact representation.
@end table
@item ensure_loaded(@var{+F}) [ISO]
@item ensure_loaded(+@var{F}) [ISO]
@findex ensure_loaded/1
@syindex compile/1
@cnindex compile/1
@ -153,14 +153,14 @@ if they have not been loaded before, does nothing otherwise.
@var{F} must be a list containing the names of the files to load.
@item load_db(@var{+Files})
@item load_db(+@var{Files})
@findex load_db/1
@syindex load_db/1
@cnindex load_db/1
@noindent
Load a database of facts with equal structure.
@item exo_files(@var{+Files})
@item exo_files(+@var{Files})
@findex exo_files/1
@syindex exo_files/1
@cnindex exo_files/1
@ -185,7 +185,7 @@ read in a very compact way database tables.
If `my_program' is started it will first reconsult all source files
that have changed since the compilation.
@item include(@var{+F}) [ISO]
@item include(+@var{F}) [ISO]
@findex include/1 (directive)
@snindex compile/1 (directive)
@cnindex compile/1 (directive)
@ -439,15 +439,6 @@ file_search_path(system,A) :-
Thus, @code{[library(A)]} will search for a file using
@code{library_directory/1} to obtain the prefix.
@item library_directory(+@var{D})
@findex library_directory/1
@snindex library_directory/1
@cnindex library_directory/1
Succeeds when @var{D} is a current library directory name. Library
directories are the places where files specified in the form
@code{library(@var{File})} are searched by the predicates
@code{consult/1}, @code{reconsult/1}, @code{use_module/1} or
@code{ensure_loaded/1}.
@item prolog_file_name(+@var{Name},-@var{FullPath})
@findex prolog_file_name/2
@ -995,8 +986,8 @@ may be a predicate indicator or of the form ``@var{PI} @code{as}
to be exported under name @var{NewName}.
@item @code{except}(@var{List})
In this case, all predicates not in @var{List} are exported. Moreover,
if ``@var{PI} @code{as} @var{NewName}'' is found, the predicate with
indicator @var{PI} is to be exported under name @var{NewName}@ as
if @code{@var{PI} @code{as} @var{NewName}} is found, the predicate with
indicator @var{PI} is to be exported under name @var{NewName} as
before.
@end itemize
@end table

View File

@ -47,11 +47,11 @@
@subtitle Version @value{VERSION}
@author Vitor Santos Costa,
@author Luís Damas,
@author Rogério Reis, and
@author Rogério Reis
@author Rúben Azevedo
@page
@vskip 2pc
Copyright @copyright{} 1989-2000 L. Damas, V. Santos Costa and Universidade
@copyright{} 1989-2014 L. Damas, V. Santos Costa and Universidade
do Porto.
Permission is granted to make and distribute verbatim copies of
@ -405,12 +405,13 @@ On-line documentation is available for YAP at:
Recent versions of YAP, including both source and selected binaries,
can be found from this same URL.
This manual was written by V@'{@dotless{i}}tor Santos Costa,
Lu@'{@dotless{i}}s Damas, Rog@'erio Reis, and R@'uben Azevedo. The
This manual was written by Vítor Santos Costa,
Luís Damas, Rogério Reis, and Rúben Azevedo. The
manual is largely based on the DECsystem-10 Prolog User's Manual by
D.L. Bowen, L. Byrd, F. C. N. Pereira, L. M. Pereira, and
D. H. D. Warren. We have also used comments from the Edinburgh Prolog
library written by R. O'Keefe. We would also like to gratefully
library written by R. O'Keefe and from the SWI-Prolog manual written by
Jan Wielemaker. We would also like to gratefully
acknowledge the contributions from Ashwin Srinivasian.
We are happy to include in YAP several excellent packages developed
@ -669,7 +670,7 @@ The original author of this code was Richard O'Keefe. Jan Wielemaker
@node Apply, Association Lists, Aggregate, Library
@section Apply Macros
@sectionbui Apply Macros
@cindex apply
This library provides a SWI-compatible set of utilities for applying a
@ -1151,6 +1152,7 @@ and lookup values of variables in each solution:
@node Gecode and ClP(FD), The Gecode Interface, , Gecode
@subsection Programming Finite Domain Constraints in YAP/Gecode
The gecode/clp(fd) interface is designed to use the GECODE functionality
in a more CLP like style. It requires
@example
@ -1714,17 +1716,10 @@ available by loading the library @code{library(lineutils)}.
Search for a character @var{Char} in the list of codes @var{Line}.
@item search_for(+@var{Char},+@var{Line})
@findex search_for/2
@snindex search_for/2
@cnindex search_for/2
Search for a character @var{Char} in the list of codes @var{Line}.
@item search_for(+@var{Char},+@var{Line},-@var{RestOfine})
@findex search_for/2
@snindex search_for/2
@cnindex search_for/2
@findex search_for/3
@snindex search_for/3
@cnindex search_for/3
Search for a character @var{Char} in the list of codes @var{Line},
@var{RestOfLine} has the line to the right.
@ -1809,13 +1804,6 @@ the character code @var{Separator}.
Copy a line from @var{StreamInput} to @var{StreamOutput}.
@item copy_line(+@var{StreamInput},+@var{StreamOutput})
@findex copy_line/2
@snindex copy_line/2
@cnindex copy_line/2
Copy a line from @var{StreamInput} to @var{StreamOutput}.
@item process(+@var{StreamInp}, +@var{Goal})
@findex process/2
@snindex process/2
@ -1889,16 +1877,14 @@ the Prolog engine instead.
Creates @var{TermOut1} and @var{TermOut2} by applying the predicate @var{Pred} to all
arguments of @var{TermIn}
@item mapargs(+@var{Pred}, +@var{TermIn}, ?@var{TermOut1},
?@var{TermOut2}, ?@var{TermOut3})
@item mapargs(+@var{Pred}, +@var{TermIn}, ?@var{TermOut1}, ?@var{TermOut2}, ?@var{TermOut3})
@findex mapargs/5
@snindex mapargs/5
@cnindex mapargs/5
Creates @var{TermOut1}, @var{TermOut2} and @var{TermOut3} by applying the predicate @var{Pred} to all
arguments of @var{TermIn}
@item mapargs(+@var{Pred}, +@var{TermIn}, ?@var{TermOut1},
?@var{TermOut2}, ?@var{TermOut3}, ?@var{TermOut4})
@item mapargs(+@var{Pred}, +@var{TermIn}, ?@var{TermOut1}, ?@var{TermOut2}, ?@var{TermOut3}, ?@var{TermOut4})
@findex mapargs/6
@snindex mapargs/6
@cnindex mapargs/6
@ -1912,7 +1898,7 @@ the Prolog engine instead.
@cnindex foldargs/4
Calls the predicate @var{Pred} on all arguments of @var{Term} and
collects a result in @var{Accumulator}
@item foldargs(+@var{Pred}, +@var{Term}, +@var{Term1}, ?@var{AccIn}, ?@var{AccOut})
@findex foldargs/5
@snindex foldargs/5
@ -2077,8 +2063,7 @@ applying the predicate @var{Pred} to all list elements on which
Calls @var{Pred} on all elements of @var{List}, @var{List1} and @var{List2} and collects a result in
@var{X} and @var{Y}.
@item foldl3(:@var{Pred}, +@var{List1}, ?@var{List2}, ?@var{X0},
?@var{X}, ?@var{Y0}, ?@var{Y}, ?@var{Z0}, ?@var{Z})
@item foldl3(:@var{Pred}, +@var{List1}, ?@var{List2}, ?@var{X0}, ?@var{X}, ?@var{Y0}, ?@var{Y}, ?@var{Z0}, ?@var{Z})
@findex foldl3/6
@snindex foldl3/6
@ -2086,8 +2071,7 @@ applying the predicate @var{Pred} to all list elements on which
Calls @var{Pred} on all elements of @code{List} and collects a
result in @var{X}, @var{Y} and @var{Z}.
@item foldl3(:@var{Pred}, +@var{List1}, ?@var{List2}, ?@var{X0},
?@var{X}, ?@var{Y0}, ?@var{Y}, ?@var{Z0}, ?@var{Z}, ?@var{W0}, ?@var{W})
@item foldl4(:@var{Pred}, +@var{List1}, ?@var{List2}, ?@var{X0}, ?@var{X}, ?@var{Y0}, ?@var{Y}, ?@var{Z0}, ?@var{Z}, ?@var{W0}, ?@var{W})
@findex foldl4/8
@snindex foldl4/8
@ -2354,7 +2338,7 @@ all elements of a matrix or list
@item -/2
subtract two numbers, subtract two matrices or lists element-by-element, or subtract a number from
all elements of a matrix or list
@item */2
@item * /2
multiply two numbers, multiply two matrices or lists element-by-element, or multiply a number from
all elements of a matrix or list
@item log/1
@ -2367,9 +2351,9 @@ natural exponentiation of a number, matrix or list
@findex foreach/2
@snindex foreach/2
@cnindex foreach/2
Deterministic iterator. The ranges are given by @var{Sequence} that is either @code{@var{I} in
@var{M}..@var{N}}, or of the form @code{[@var{I},@var{J}] ins
@var{M}..@var{N}}, or a list of the above conditions.
Deterministic iterator. The ranges are given by @var{Sequence} that is
either @code{@var{I} in @var{M}..@var{N}}, or of the form
@code{[@var{I},@var{J}] ins @var{M}..@var{N}}, or a list of the above conditions.
Variables in the goal are assumed to be global, ie, share a single value
in the execution. The exceptions are the iteration indices. Moreover, if
@ -2868,16 +2852,6 @@ in the matlab variable with name @var{Array}. Corresponds to the
MATLAB command @code{zeros}.
@item matlab_zeros(+@var{SizeX}, +@var{SizeY}, +@var{SizeZ}, ?@var{Array})
@findex matlab_zeros/4
@snindex matlab_zeros/4
@cnindex matlab_zeros/4
MATLAB will create an array of zeros of size @var{SizeX}, @var{SizeY},
and @var{SizeZ}. If @var{Array} is bound to an atom, store the array
in the matlab variable with name @var{Array}. Corresponds to the
MATLAB command @code{zeros}.
@end table
@ -8595,10 +8569,6 @@ The possible forms for @var{P} are the same as in @code{spy P}.
@cnindex nospyall/0
Removes all existing spy-points.
@item notrace
@findex notrace/0
Switches off the debugger and stops tracing.
@item leash(+@var{M})
@findex leash/1
@syindex leash/1
@ -10054,7 +10024,7 @@ static int start_n100(void);
static int continue_n100(void);
typedef struct @{
YAP_Term next_solution; /* the next solution */
YAP_Term next_solution;
@} n100_data_type;
n100_data_type *n100_data;

View File

@ -57,21 +57,12 @@ append(ListOfLists, List) :-
append_(ListOfLists, List).
append_([], []).
append_([L|Ls], As) :-
append(L, Ws, As),
append_(Ls, Ws).
% delete(List, Elem, Residue)
% is true when List is a list, in which Elem may or may not occur, and
% Residue is a copy of List with all elements identical to Elem deleted.
delete([], _, []).
delete([Head|List], Elem, Residue) :-
Head == Elem, !,
delete(List, Elem, Residue).
delete([Head|List], Elem, [Head|Residue]) :-
delete(List, Elem, Residue).
append_([L], L).
append_([L1,L2], L) :-
append(L1,L2,L).
append_([L1,L2|[L3|LL]], L) :-
append(L1,L2,LI),
append_([LI|[L3|LL]],L).
% last(List, Last)

View File

@ -10,8 +10,22 @@
:- yap_flag( double_quotes, string ).
:- dynamic edge/4, node/4.
:- dynamic edge/4, node/4, public_predicate/3, private_predicate/3, module_on/2.
% @short node(?Module:module, ?Predicate:pred_indicator, ?File:file, ?Generator:atom) is nondet
%
inline( !/0 ).
inline( (\+)/1 ).
inline( (fail)/0 ).
inline( (false)/0 ).
inline( (repeat)/0 ).
inline( (true)/0 ).
inline( []/0 ).
% @short edge(+SourceModule:module, +SourcePredicate:pred_indicator, +TargetPredicate:pred_indicator, +InFile:file) is nondet
%
main :-
% from libraries outside the current directories
@ -76,6 +90,7 @@ c_line(Line, _Mod, F) :-
atom_string( N, NS),
number_string(A, AS),
nb_getval( current_module, Mod ),
\+ inline(N/A),
assert( node( Mod, N/A, F, c) ).
c_line(Line, _Mod, F) :-
append( _, [ "Yap_InitAsmPred", NS, AS|_], Line), !,
@ -94,39 +109,39 @@ c_line(Line, _Mod, F) :-
atom_string(N,NS),
number_string(A, AS),
nb_getval( current_module, Mod ),
assert( node( Mod, N/A, F, back_c) ).
assert( node( Mod, N/A, F, c) ).
c_line(Line, _Mod, F) :-
append( _, [ "YAP_UserCPredicate", NS, AS|_], Line), !,
atom_string(N,NS),
number_string(A, AS),
nb_getval( current_module, Mod ),
assert( node( Mod, N/A, F, user_c) ).
assert( node( Mod, N/A, F, c) ).
c_line(Line, _Mod, F) :-
append( _, [ "PRED_DEF", NS, AS|_], Line), !,
atom_string(N,NS),
number_string(A, AS),
nb_getval( current_module, Mod ),
assert( node( Mod, N/A, F, user_c) ).
assert( node( Mod, N/A, F, c) ).
/*
c_line(Line, _Mod, F) :-
append( _, [ "PRED_IMPL", NS, AS|_], Line), !,
atom_string(N,NS),
number_string(A, AS),
nb_getval( current_module, Mod ),
assert( node( Mod, N/A, F, user_c) ).
assert( node( Mod, N/A, F, c) ).
*/
c_line(Line, _Mod, F) :-
append( _, [ "PRED", NS, AS|_], Line), !,
atom_string(N,NS),
number_string(A, AS),
nb_getval( current_module, Mod ),
assert( node( Mod, N/A, F, user_c) ).
assert( node( Mod, N/A, F, c) ).
c_line(Line, _Mod, F) :-
append( _, [ "FRG", NS, AS|_], Line), !,
atom_string(N,NS),
number_string(A, AS),
nb_getval( current_module, Mod ),
assert( node( Mod, N/A, F, user_c) ).
assert( node( Mod, N/A, F, c) ).
mod("ATTRIBUTES_MODULE", _, attributes ).
@ -147,6 +162,24 @@ mod("cm", M, M ).
mod("OldCurrentModule", M, M ).
pl_preds(Dir) :-
atom( Dir ),
Root = '.',
Suffix = '.yap',
atom_concat([Root,'/',Dir,'/','*',Suffix], Pattern),
expand_file_name( Pattern, Files ),
member( File, Files ),
pl_nodes( File , prolog, Suffix ),
fail.
pl_preds(Dir) :-
atom( Dir ),
Root = '.',
Suffix = '.pl',
atom_concat([Root,'/',Dir,'/','*',Suffix], Pattern),
expand_file_name( Pattern, Files ),
member( File, Files ),
pl_nodes( File , prolog, Suffix ),
fail.
pl_preds(Dir) :-
atom( Dir ),
Root = '.',
@ -167,11 +200,101 @@ pl_preds(Dir) :-
fail.
pl_preds(_).
pl_nodes(F, _Mod, Suffix) :-
% writeln(F),
file_to_module(F, Suffix, Mod),
nb_setval( current_module, Mod ),
open(F, read, S),
repeat,
read_term( S, T, [singletons(_Vars), term_position(_Pos) ] ),
( T == end_of_file
->
!,
close(S)
;
% warn_singletons(Vars, Pos),
nb_getval( current_module, M ),
line_count( S, Lines ),
build_nodes( T, F:Lines, M ),
fail
).
build_nodes( M:T, F, _ ) :- !,
build_nodes( T, F, M ).
build_nodes( (M:H :- B), F, _ ) :- !,
build_nodes( (H :- B), F, M ).
build_nodes( (H :- _B), F, M ) :- !,
functor(H, N, A),
add_node( M:N/A, F).
build_nodes( (H --> _B), F, M ) :- !,
functor(H, N, A1),
A is A1+2,
add_node( M:N/A, F).
build_nodes( (:- module( NM, Is ) ), F, _M ) :- !,
nb_setval( current_module, NM ),
F = FN:_,
assert( module_on( FN:_ , NM) ),
maplist( public(F, NM), Is ).
build_nodes( (:- private( Is ) ), F, M ) :- !,
maplist( private(F, M), Is ).
build_nodes( (:- dynamic Bs), F, M ) :-
add_nodes( Bs, F, M).
build_nodes( (:- multifile Bs), F, M ) :-
add_nodes( Bs, F, M).
build_nodes( (:- thread_local Bs), F, M ) :-
add_nodes( Bs, F, M).
build_nodes( (:- _B), _F, _M ) :- !.
build_nodes( (?- _B), _F, _M ) :- !.
build_nodes( H, F, M ) :-
functor(H, N, A),
add_node( M:N/A, F).
public(F, M, I) :-
assert(public_predicate(I, M, F)).
private(F, M, I) :-
assert(private_predicate(I, M, F)).
add_nodes( (A,B), F, M) :- !,
add_nodes( A, F, M),
add_nodes( B, F, M).
add_nodes( M:A, F, _M) :- !,
add_nodes( A, F, M).
add_nodes( B, F, M) :- !,
add_node( M:B, F).
add_node( N, F, M ) :-
always_strip_module(M:N, M, N1 ),
functor(N1, Na, Ar),
(Na = '$c_built_in'/3 -> writeln(add_node(M:Na/Ar, F)) ; true ),
add_node(M:Na/Ar, F).
add_node( M:N/A, F) :-
F = FN:_,
F0 = FN:0,
( module_on( F, _ ) -> true
;
sub_atom(N, 0, 1, _, '$') -> true
;
public_predicate(N/A, M, F0) -> true
;
private_predicate(N/A, M, F0) -> true
;
assert(public_predicate(N/A, M, F0) )
),
fail.
add_node( M:N/A, F) :- node( M, N/A, F, _ ), !.
add_node( M:N/A, F) :-
assert( node( M, N/A, F, prolog ) ).
pl_file(F, _Mod, Suffix) :-
% writeln(F),
file_base_name(F, Base),
atom_concat(Mod, Suffix, Base),
nb_setval( current_module, Mod ),
file_to_module(F, Suffix, Mod),
nb_setval( current_module, Mod ),
open(F, read, S),
repeat,
read_term( S, T, [singletons(_Vars), term_position(_Pos) ] ),
@ -187,47 +310,32 @@ pl_file(F, _Mod, Suffix) :-
fail
).
file_to_module(F, _Suffix, Mod) :-
module_on(F:_, Mod), !.
file_to_module(F, Suffix, Mod) :-
file_base_name(F, Base),
atom_concat(Mod0, Suffix, Base),
atom_concat('$_',Mod0, Mod).
build_graph( M:T, F, _ ) :- !,
build_graph( T, F, M ).
build_graph( (M:H :- B), F, _ ) :- !,
build_graph( (H :- B), F, M ).
build_graph( (H :- B), F, M ) :- !,
functor(H, N, A),
add_node( M:N/A, F),
add_deps( B, M, M:N/A, F, 0).
build_graph( (H --> B), F, M ) :- !,
functor(H, N, A1),
A is A1+2,
add_node( M:N/A, F),
add_deps( B, M, M:N/A, F, 2).
build_graph( (:- dynamic Bs), F, M ) :-
add_nodes( Bs, F, M).
build_graph( (:- multifile Bs), F, M ) :-
add_nodes( Bs, F, M).
build_graph( (:- thread_local Bs), F, M ) :-
add_nodes( Bs, F, M).
build_graph( (:- module( NM, _Is ) ), F, _M ) :- !,
nb_setval( current_module, NM ),
F = FN:_,
assert( module_on( FN:_ , NM) ).
build_graph( (:- _B), _F, _M ) :- !.
build_graph( (?- _B), _F, _M ) :- !.
build_graph( H, F, M ) :-
functor(H, N, A),
add_node( M:N/A, F).
build_graph( _H, _F, _M ).
add_nodes( (A,B), F, M) :- !,
add_nodes( A, F, M),
add_nodes( B, F, M).
add_nodes( M:A, F, _M) :- !,
add_nodes( A, F, M).
add_nodes( B, F, M) :- !,
add_node( M:B, F).
add_node( N, F, M ) :-
always_strip_module(M:N, M, N1 ),
functor(N1, Na, Ar),
add_node(M:Na/Ar, F).
add_node( M:N/A, F) :- node( M, N/A, F, _ ), !.
add_node( M:N/A, F) :- assert( node( M, N/A, F, prolog ) ).
add_deps(V, _M, _P, _F, _) :- var(V), !.
add_deps((A,B), M, P, F, L) :- !,
@ -244,17 +352,31 @@ add_deps(once(A), M, P, F, L) :- !,
add_deps({A}, M, P, F, 2) :- !,
add_deps(A, M, P, F, 0).
add_deps([_|_], _M, _P, _F, 2) :- !.
add_deps(A, M0, P, F, L) :- !,
always_strip_module(M0:A, M, A1),
add_deps([], _M, _P, _F, 2) :- !.
add_deps(!, _M, _P, _F, _) :- !.
add_deps(true, _M, _P, _F, 0) :- !.
add_deps(false, _M, _P, _F, 0) :- !.
add_deps(fail, _M, _P, _F, 0) :- !.
add_deps(repeat, _M, _P, _F, 0) :- !.
add_deps(A, _M0, P, F, L) :- !,
always_strip_module(unused_module:A, M1, A1),
functor(A1, N, Ar0),
Ar1 is Ar0+L,
(M1 == unused_module -> ( node( M, N/Ar1, _, _) -> true ; writeln( undef:M:N/Ar1 ), assert(node(prolog,N/Ar1,'/dev/null':0,prolog)) ) ; M = M1 ),
P = _:Na/Ar,
put_deps(M, Na/Ar, N/Ar1, F, L).
( put_deps(M, N/Ar1, Na/Ar, F, L)
->
true
;
writeln('FAILED'(add_deps(A, _M0, P, F, L)))
).
put_deps(M, PN, P, F, _L) :-
edge(M, PN, P, F), !.
put_deps(M, PN, P, F, _L) :-
assert(edge(M,PN, P, F) ).
put_deps(_, P, _, _, _L) :-
inline( P ), !.
put_deps(M, P, PN, F, _L) :-
edge(M, P, PN, F), !.
put_deps(M, P, PN, F, _L) :-
assert(edge(M,P, PN, F) ).
doubles :-
node(M, P, _F, _),
@ -265,7 +387,7 @@ doubles :-
doubles.
undefs :-
edge(_M,_,P,F),
edge(_M,P,_,F),
\+ node(_, P, _, _),
format('UNDEFINED procedure call ~q at ~w~n',[P, F]),
fail.
@ -276,7 +398,7 @@ pl_exports(M:Dir) :-
atom_concat([Root,'/',Dir,'/','*.c'], Pattern),
expand_file_name( Pattern, Files ),
member( File, Files ),
pl_export( File , M ),
pl_export( File , M, '.c' ),
fail.
pl_exports(Dir) :-
atom( Dir ),
@ -284,34 +406,38 @@ pl_exports(Dir) :-
atom_concat([Root,'/',Dir,'/','*.yap'], Pattern),
expand_file_name( Pattern, Files ),
member( File, Files ),
pl_export( File , prolog ),
pl_export( File , prolog, '.yap' ),
fail.
pl_exports(Dir) :-
atom( Dir ),
Root = '.',
atom_concat([Root,'/',Dir,'/','*.pl'], Pattern),
expand_file_name( Pattern, Files ),
member( File, Files ),
pl_export( File , prolog, '.pl' ),
fail.
pl_exports(_).
pl_export(F, _Mod) :-
% writeln(F),
file_base_name(F, Base),
atom_concat(Mod, '.yap', Base),
pl_export(F, _Mod, Suffix) :-
file_to_module( F, Suffix, Mod),
format('****************** compile ~a ******************~n', [F]),
nb_setval( current_module, Mod ),
( setof(P, pub(Mod, P), Es) -> true ; Es = [] ),
( setof(P, priv(Mod, P), Ps) -> true ; Ps = [] ),
format(':- system_module( ~q, ',[Mod]),
out_list(Es),
format(', '),
out_list(Ps),
format(').~n~n', []),
( module_on( F:_, _) -> Es = [], ( setof(P, mod_priv(Mod, P), Ps) -> true ; Ps = [] )
;
( setof(P, pub(Mod, P), Es) -> true ; Es = [] ),
( setof(P, priv(Mod, P), Ps) -> true ; Ps = [] ),
format(':- system_module( ~q, ',[Mod]),
out_list(Es),
format(', '),
out_list(Ps),
format(').~n~n', [])
),
fail.
pl_import(F, _Mod) :-
% writeln(F),
file_base_name(F, Base),
atom_concat(Mod, '.yap', Base),
pl_export(F, _Mod, Suffix) :-
file_to_module( F, Suffix, Mod),
nb_setval( current_module, Mod ),
( setof(P, pub(Mod, P), Es) -> true ; Es = [] ),
( setof(P, priv(Mod, P), Ps) -> true ; Ps = [] ),
format(':- system_module( ~q, ',[Mod]),
out_list(Es),
format(', '),
setof( P, has_edge(M, P, Mod, F), Ps),
format(':- use_system_module( ~q, ',[M]),
out_list(Ps),
format(').~n~n', []),
fail.
@ -333,12 +459,24 @@ pub(M, P) :-
P = N/_A,
\+ sub_atom(N,0,1,_,'$').
priv(M, P) :-
has_edge(M1, P1, M, F) :-
edge(M1, P1, _P, F:_),
node(M1, P1, _, _),
M1 \= prolog,
M1 \= M,
\+ public_predicate(P1, M1, _).
mod_priv(M, P) :-
node(M, P, _, _),
P = N/_A,
sub_atom(N,0,1,_,'$'),
node(M, P, _, _),
\+ public_predicate(P, M, _),
edge(M1, P, _P0, _), M1 \= M.
priv(M, P) :-
node(M, P, F:_, _),
\+ public_predicate(P, M, _),
edge(_, P, _P1, F1:_), F1 \= F.
% utilities
split_string( S , Cs, N) :-
@ -348,7 +486,7 @@ split_string( S , Cs, N) :-
maplist(remove_escapes, Ncs0, Ncs),
maplist(string_codes, N, Ncs).
remove_escapes([0'\\ ,A|Cs], [A|NCs]) :- !,
remove_escapes([0'\\ ,A|Cs], [A|NCs]) :- !, %'
remove_escapes(Cs, NCs).
remove_escapes([A|Cs], [A|NCs]) :-
remove_escapes(Cs, NCs).

View File

@ -784,6 +784,40 @@ PL_mb_text(PL_chars_t *text, int flags)
break;
}
case ENC_UTF8:
{ const char *s = (const char*)text->text.t;
const char *e = &s[text->length];
if ( target == ENC_ISO_LATIN_1 )
{ for( ; s<e; )
{ int ch;
s = _PL__utf8_get_char(s, &ch);
if (ch > 0xff) {
unfindBuffer(BUF_RING);
norep = *s;
goto rep_error;
}
addBuffer(b, ch, char);
}
addBuffer(b, 0, char);
} else
{ mbstate_t mbs;
memset(&mbs, 0, sizeof(mbs));
for( ; s<e; )
{ int ch;
s = _PL__utf8_get_char(s, &ch);
if ( !wctobuffer(ch, &mbs, b) )
{ unfindBuffer(BUF_RING);
norep = ch;
goto rep_error;
}
}
wctobuffer(0, &mbs, b);
}
break;
}
case ENC_WCHAR:
{ if ( target == ENC_ISO_LATIN_1 )
{ return PL_demote_text(text);

@ -1 +1 @@
Subproject commit d5c70de04a6fce6be71a9086d0164dd0b0c9d9d4
Subproject commit 0f77a1e1b90b36bddb1844712380f4f3858123b7

View File

@ -524,7 +524,7 @@ void lbfgs_free(lbfgsfloatval_t *x);
/**
@mainpage libLBFGS: a library of Limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS)
@chapter libLBFGS: a library of Limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS)
@section intro Introduction

@ -1 +1 @@
Subproject commit abd65ae6486993e04dfa883163efdad3bab789ab
Subproject commit a8a43aa09892c4b7018dc053d8e7653e2f648107