- 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
 - 
In the current implementation this only causes a flag to be set on the 
predicate that causes children to be hidden from the debugger. The name 
anticipates on anticipated changes to the compiler.
 - note-8
 - 
BUG: As SWI-Prolog integers are 32-bits, SWI-Prolog cannot represent 
offsets in large files. Therefore, calls involving file sizes or offsets 
do not work properly.
 - note-9
 - 
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-10
 - 
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-11
 - 
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-12
 - 
GNU-Emacs keeps extending the string, but why? Adding more text will not 
make it match.
 - note-13
 - 
In most cases the location where the parser cannot proceed is further 
down the file than the actual error-location.
 - note-14
 - 
Defined in Prolog in the file 
library(emacs/prolog_mode), 
you may wish to extend this. Please contribute your extensions!
 - note-15
 - 
On Windows this is realised by plwin.exe, on Unix through the GNU 
readline library, which is included automatically when found by configure.
 - note-16
 - 
These marks do not suggest instantiation (e.g. var(+Var)).
 - note-17
 - 
It does work for normal loading, but not for qcompile/1.
 - note-18
 - 
On older versions the condition used to be if(changed). Poor time 
management on some machines or due to copying often caused problems. The make/0 
predicate deals with updating the running system after changing the 
sourcecode.
 - note-19
 - 
The predicates cyclic_term/1 
and acyclic_term/1 
are compatible to SICStus Prolog. Some Prolog systems supporting cyclic 
terms use is_cyclic/1.
 - note-20
 - 
Strings might be considered atoms in future versions. See also section 
4.23
 - note-21
 - 
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-22
 - 
This predicate was introduced for the implementation of dif/2 
and when/2 
after discussion with Tom Schrijvers and Bart Demoen. None of us is 
really happy with the name and therefore suggestions for a new name are 
welcome.
 - note-23
 - 
Up to version 4.0.6, the sequence X=!, X acted as a true cut. This 
feature has been deleted for ISO compliance.
 - note-24
 - 
BUG: The decompiler implemented by clause/2 
returns this construct as a normal conjunction too.
 - note-25
 - 
BUG: During the execution of Cleanup, garbage collection and 
stack-shifts are disabled.
 - note-26
 - 
I'd like to acknowledge Bart Demoen for his clarifications on these 
matters.
 - note-27
 - 
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-28
 - 
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-29
 - 
For example, using the immediate update view, no call to a dynamic 
predicate is deterministic.
 - note-30
 - 
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-31
 - 
Actually based on Quintus Prolog, providing this interface before the 
ISO standard existed.
 - note-32
 - 
New code should use the 
alias(Alias) option for 
compatibility to the ISO standard
 - note-33
 - 
BUG: Backtracking does not give other aliases.
 - note-34
 - 
The ISO I/O layer uses 
user_input, user_output 
and user_error.
 - note-35
 - 
As of version 5.3.15, the pipe construct is supported in the MS-Windows 
version, both for plcon.exe and plwin.exe. The 
implementation uses code from the LUA programming language (http://www.lua.org).
 - note-36
 - 
Filenames can be ambiguous and SWI-Prolog streams can refer to much more 
than just files.
 - note-37
 - 
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-38
 - 
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-39
 - 
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-40
 - 
The instantiation pattern (-, +, ?) is an extension to `standard' 
Prolog.
 - note-41
 - 
This behaviour was decided after a long discussion between David 
Reitter, Richard O'Keefe, Bart Demoen and Tom Schrijvers.
 - note-42
 - 
This predicate used to be called free_variables/2. 
The name term_variables/2 
is more widely used. The old predicate is still available from the 
library 
library(backcomp).
 - note-43
 - 
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-44
 - 
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-45
 - 
BUG: Note that 
 is both an atom an empty code/character 
list. The predicate atom_length/2 
returns 2 for this atom.
 - note-46
 - 
We prefer 
infinite, but some other Prolog systems already 
use inf for infinity we accept both for the time being.
 - note-47
 - 
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-48
 - 
msb/1 is 
compatible to hProlog
 - note-49
 - 
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-50
 - 
Contributed by Richard O'Keefe.
 - note-51
 - 
Please note that the semantics have changed between 3.1.1 and 3.1.2
 - note-52
 - 
The maplist/2 
predicate replaces the obsolete checklist/2 
predicate.
 - note-53
 - 
BUG: This predicate should have been called 
win_window_title 
for consistent naming.
 - note-54
 - 
Silent operation was the default up to version 3.2.6.
 - note-55
 - 
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-56
 - 
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-57
 - 
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-58
 - 
A similar facility was added to Edinburgh C-Prolog by Wouter Jansweijer.
 - note-59
 - 
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-60
 - 
We hereby acknowledge Lionel Fourquaux, who suggested the design 
described here after a newsnet enquiry.
 - note-61
 - 
This interface is contributed by Don Dwiggins.
 - note-62
 - 
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-63
 - 
BUG: I plan to supply a real gensym/2 
which does give this warrant for future versions.
 - note-64
 - 
Although this would make it impossible to call B directly.
 - note-65
 - 
The system version uses recordz/2 
and recorded/3.
 - note-66
 - 
On an dual AMD-Athlon 1600, SWI-Prolog 5.1.0 creates and joins 4,957 
threads per second elapsed time.
 - note-67
 - 
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-68
 - 
See the documentation for the POSIX thread functions 
pthread_cond_signal() v.s. pthread_cond_broadcastt() for background 
information.
 - note-69
 - 
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-70
 - 
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-71
 - 
Otherwise asynchronous atom garbage collection might destroy the atom 
before it is used.
 - note-72
 - 
Do not pass the integer 0 for normal operation, as this is interpreted 
as 
PL_Q_NODEBUG for backward compatibility reasons.
 - note-73
 - 
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-74
 - 
A better default would be to use synchronous handling, but this 
interface preserves backward compatibility.
 - note-75
 - 
BUG: Various fatal errors may cause PL_initialise to call PL_halt(1), 
preventing it from returning at all.
 - note-76
 - 
BUG: Eventually it may become possible to call PL_halt() 
from any thread.
 - note-77
 - 
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-78
 - 
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-79
 - 
The argument order of this predicate was changed in 5.1.12 for 
compatibility reasons.
 - note-80
 - 
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-81
 - 
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-82
 - 
This exception is a straight re-phrasing of the license used for 
libgcc, 
the GNU-C runtime library facing similar technical issues.