- note-1
-
Quintus is a trademark of Quintus Computer Systems Inc., USA
- note-2
-
BIM is a trademark of BIM sa/nv., Belgium
- note-3
-
On most installations, single-character commands are executed without
waiting for the RETURN key.
- note-4
-
One could choose words, defining words as a sequence of alpha-numeric
characters and the word separators as anything else, but one could also
choose Prolog arguments
- note-5
-
This implies the system can run out of local stack in debug mode, while
no problems arise when running in non-debug mode.
- note-6
-
The #-sign can be the legal start of a normal Prolog clause. In
the unlikely case this is required, leave the first line blank or add a
header-comment.
- note-7
-
On MS-Windows, the alternative extension is stored in the registry-key
HKEY_CURRENT_USER/Software/SWI/Prolog/fileExtension
or HKEY_LOCAL_MACHINE/Software/SWI/Prolog/fileExtension
- note-8
-
Watching these files is a good habit. If expected files are not reloaded
you may have forgotten to save them from the editor or you may have been
editing the wrong file (wrong directory).
- note-9
-
Decent merging with MS-Windows control-key conventions is difficult as
many conflict with GNU-Emacs. Expecially the cut/copy/paste commands
conflict with important GNU-Emacs commands.
- note-10
-
GNU-Emacs keeps extending the string, but why? Adding more text will not
make it match.
- note-11
-
In most cases the location where the parser cannot proceed is further
down the file than the actual error-location.
- note-12
-
Defined in Prolog in the file
library(emacs/prolog_mode)
,
you may wish to extend this. Please contribute your extensions!
- note-13
-
On Windows this is realised by plwin.exe, on Unix through the GNU
readline library, which is included automatically when found by configure.
- note-14
-
These marks do not suggest instantiation (e.g. var(+Var)).
- note-15
-
It does work for normal loading, but not for qcompile/1.
- note-16
-
Strings might be considered atoms in future versions. See also section
4.23
- note-17
-
In fact the variables are compared on their (dereferenced) addresses.
Variables living on the global stack are always < than
variables on the local stack. Programs should not rely on the order in
which variables are sorted.
- note-18
-
Up to version 4.0.6, the sequence X=!, X acted as a true cut. This
feature has been deleted for ISO compliance.
- note-19
-
BUG: The decompiler implemented by clause/2
returns this construct as a normal conjunction too.
- note-20
-
BUG: During the execution of Cleanup, garbage collection and
stack-shifts are disabled.
- note-21
-
I'd like to acknowledge Bart Demoen for his clarifications on these
matters.
- note-22
-
Note that call_with_depth_limit/2
is defined in
library(time)
, part of the `clib' package.
The version provided in this library runs on POSIX systems as well as
MS-Windows and can schedule multiple concurrent alarms.
- note-23
-
BUG: The system should have a special type for pointers, thus avoiding
the Prolog user having to worry about consistency matters. Currently
some simple heuristics are used to determine whether a reference is
valid.
- note-24
-
For example, using the immediate update view, no call to a dynamic
predicate is deterministic.
- note-25
-
The specification of this predicate is from Richard O'Keefe. The
implementation is allowed to optimise the predicate. This is not yet
implemented. In multi-threaded Prolog however, static code runs faster
as it does not require synchronization. This is particulary true on SMP
hardware.
- note-26
-
Actually based on Quintus Prolog, providing this interface before the
ISO standard existed.
- note-27
-
New code should use the
alias(Alias)
option for
compatibility to the ISO standard
- note-28
-
BUG: Backtracking does not give other aliases.
- note-29
-
The ISO I/O layer uses
user_input
, user_output
and user_error
.
- note-30
-
Filenames can be ambiguous and SWI-Prolog streams can refer to much more
than just files.
- note-31
-
For compatibility reasons, a Timeout value of 0 (integer)
also waits indefinitely. To call select() without giving up the CPU pass
the float 0.0. If compatibility with versions older than 5.1.3 is
desired pass the float value 1e-7.
- note-32
-
Note that Edinburgh Prolog defines fileerrors/0
and nofileerrors/0. As this
does not allow you to switch back to the old mode I think this
definition is better.
- note-33
-
In version 1.2 instantiation faults led to error messages. The new
version can be used to do type testing without the need to catch illegal
instantiations first.
- note-34
-
The instantiation pattern (-, +, ?) is an extension to `standard'
Prolog.
- note-35
-
Upto version 3.2.x, atom_chars/2
behaved as the current atom_codes/2.
The current definition is compliant with the ISO standard
- note-36
-
This is also called atom_char/2
in older versions of SWI-Prolog as well as some other Prolog
implementations. atom_char/2 is
available from the library
backcomp.pl
- note-37
-
BUG: Note that
is both an atom an empty code/character
list. The predicate atom_length/2
returns 2 for this atom.
- note-38
-
The behaviour to deal with natural numbers only was defined by Richard
O'Keefe to support the common count-down-to-zero in a natural way. Upto
5.1.8 succ/2
also accepted negative integers.
- note-39
-
In versions before 5.0.1, is_list/1
just checked for
or [_|_]
and proper_list/1
had the role of the current is_list/1.
The current definition is conform the de-facto standard. Assuming proper
coding standards, there should only be very few cases where a
quick-and-dirty is_list/1
is a good choice. Richard O'Keefe pointed at this issue.
- note-40
-
Contributed by Richard O'Keefe.
- note-41
-
Please note that the semantics have changed between 3.1.1 and 3.1.2
- note-42
-
BUG: This predicate should have been called
win_window_title
for consistent naming.
- note-43
-
Silent operation was the default up to version 3.2.6.
- note-44
-
On Windows, the home directory is determined as follows: if the
environment variable
HOME
exists, this is used. If the
variables HOMEDRIVE
and HOMEPATH
exist
(Windows-NT), these are used. At initialisation, the system will set the
environment variable HOME
to point to the SWI-Prolog home
directory if neither HOME
nor HOMEPATH
and HOMEDRIVE
are defined
- note-45
-
BUG: Some of the file-I/O predicates use local filenames. Changing
directory while file-bound streams are open causes wrong results on telling/1, seeing/1
and current_stream/3
- note-46
-
BUG: In the multi-threaded version, halt/0
does not work when not called from the main thread. In the
current system a
permission_error
exception is raised.
Future versions may enable halt/0
from any thread.
- note-47
-
A similar facility was added to Edinburgh C-Prolog by Wouter Jansweijer.
- note-48
-
There are two implementations; one based on setitimer() ising the
SIGPROF
signal and one using Windows Multi Media (MM) timers. On other systems
the profiler is not provided.
- note-49
-
We hereby acknowledge Lionel Fourquaux, who suggested the design
described here after a newsnet enquiry.
- note-50
-
This interface is contributed by Don Dwiggins.
- note-51
-
Upto version 3.4.5 this was a list of character codes. As recent
versions have atom garbage collection there is no need for this anymore.
- note-52
-
BUG: I plan to supply a real gensym/2
which does give this warrant for future versions.
- note-53
-
Although this would make it impossible to call B directly.
- note-54
-
The system version uses recordz/2
and recorded/3.
- note-55
-
On an dual AMD-Athlon 1600, SWI-Prolog 5.1.0 creates and joins 4,957
threads per second elapsed time.
- note-56
-
Getting the CPU-time of a different thread is not supported on all
platforms. For Microsoft, it does not work in 95/98/ME. For POSIX
systems it requires times() to return values specific for the calling
thread.
- note-57
-
See the documentation for the POSIX thread functions
pthread_cond_signal() v.s. pthread_cond_broadcastt() for background
information.
- note-58
-
BUG: None of these constraints are properly enforced by the system in
the current implementation. It is therefore advised not to delete queues
unless you are absolutely sure it is safe.
- note-59
-
Dual AMD 1600+ running SuSE Linux 7.3: 18%, Single P-III 733 running
SuSE Linux 8.0: 12%, Single P-III 450 running NT-4/TSE: 1%.
- note-60
-
The system also contains code to load
.o
files directly for
some operating systems, notably Unix systems using the BSD a.out
executable format. As the number of Unix platforms supporting this gets
quickly smaller and this interface is difficult to port and slow, it is
no longer described in this manual. The best alternatively would be to
use the dld package on machines do not have
shared libraries
- note-61
-
Otherwise asynchronous atom garbage collection might destroy the atom
before it is used.
- note-62
-
Do not pass the integer 0 for normal operation, as this is interpreted
as
PL_Q_NODEBUG
for backward compatibility reasons.
- note-63
-
This interface differs in two ways from Quintus. The calling predicates
simp,y signal failure if an exception was raised, and a term referenced
is returned, rather passed and filled with the error term. Exceptions
can only be handled using the PL_next_solution()
interface, as a handle to the query is required
- note-64
-
A better default would be to use synchronous handling, but this
interface preserves backward compatibility.
- note-65
-
BUG: Various fatal errors may cause PL_initialise to call PL_halt(1),
preventing it from returning at all.
- note-66
-
BUG: Eventually it may become possible to call PL_halt()
from any thread.
- note-67
-
These functions were introduced in SWI-Prolog 5.0.9 to realise
guaranteed portability. Foreign code that must be compatible with older
versions can check the
PLVERSION
macro.
- note-68
-
BUG: Upto SWI-Prolog 3.3.10, the definition of this predicate was not
according to the de-facto standard. The first two arguments were in the
wrong order.
- note-69
-
The argument order of this predicate was changed in 5.1.12 for
compatibility reasons.
- note-70
-
The returned term is actually an illegal Prolog term that may hold
references from the global- to the local stack to preserve the variable
names.
- note-71
-
On the Unix version, the default toplevel uses the GNU readline library
for command-line editing. This library is distributed under the GPL. In
practice this problem is small as most final applications have Prolog
embedded, without direct access to the commandline and therefore without
need for
libreadline
.
- note-72
-
This exception is a straight re-phrasing of the license used for
libgcc
,
the GNU-C runtime library facing similar technical issues.