Home Contents Index Summary Previous Next

Footnotes

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.