This module provides partial compatibility with the XSB Prolog
- Further dialect initialization. Called from expects_dialect/1.
- xsb_import(:Predicates, +From)
- Make Predicates visible in From. As the XSB library structructure is
rather different from SWI-Prolog's, this is a heuristic process.
- xsb_set_prolog_flag(+Flag, +Value)
- Map some XSB Prolog flags to their SWI-Prolog's equivalents.
- add_lib_dir(+Directories) is det
- add_lib_dir(+Root, +Directories) is det
- Add members of the comma list Directories to
library_directory/1. If Root is given, all members of
Directories are interpreted relative to Root.
- compile(File, Options)
- The XSB version compiles a file into .xwam without loading it. We do
not have that. Calling qcompile/1 seems the best start.
- load_dyn(+FileName) is det
- load_dyn(+FileName, +Direction) is det
- load_dync(+FileName) is det
- load_dync(+FileName, +Direction) is det
- Proper implementation requires the Quintus
SWI-Prolog never had that as clause/2 is allowed on static code,
which is the main reason to want this.
The dync versions demand source in canonical format. In SWI-Prolog
there is little reason to demand this.
- set_global_compiler_options(+List) is det
- Set the XSB global compiler options.
- compiler_options(+Options) is det
- Locally switch the compiler options
- Same as \+ (support XSB legacy code). As the XSB manual claims this
is optimized we normally do goal expansion to \+/1.
- sk_not(:P) is semidet
- Sound negation with non-ground P. Equivalent to not_exists/1.
- - New code should use not_exists/1.
- gc_tables(-Remaining) is det
- The table abolish predicates leave the actual destruction of the
tables to the atom garbage collector to avoid deleting active
tables. This predicate runs garbage_collect_atoms/0 and counts the
remaining erased tables.
- - Due to the heuristic nature of garbage_collect_atoms/0, not
all tables may be reclaimed immediately.
- cputime(-Seconds) is det
- True when Seconds is the used CPU time.
- walltime(-Seconds) is det
- True when Seconds is the wall time sice Prolog was started
- debug_ctl(+Option, +Value) is det
- Control the XSB debugger. The current implementation merely defines
the predicate. Much more can be mapped to SWI-Prolog primitives.
- Declare a dynamic predicate as shared. This is the default for
- fmt_write(+Fmt, +Term) is det
- fmt_write(+Stream, +Fmt, +Term) is det
- C-style formatted write, where the arguments are formed by the
arguments of Term. We map this to format/2,3.
- - We need to complete the translation of the fmt_write sequences
to format/2,3 sequences.
- path_sysop(+Op, ?Value) is semidet
- path_sysop(+Op, ?Arg1, ?Arg2) is semidet
- Unified interface to the operations on files. All these calls
succeed iff the corresponding system call succeeds.
- - The below implementation covers all operations from XSB 3.8.
SWI file name operations are always on POSIX style file names. The
implementation may have semantic differences.
- Abort with a message
The following predicates are exported from this file while their implementation is defined in imported modules or non-module files loaded by this module.
- timed_call(:Goal, :Options)
- Emulation for XSB timed_call/2. Runs Goal as once/1 with timed
interrupts. The interrupt goals are called as interrupts using the
semantics of ignore/1: possible choice points are cut and failure is
ignored. If the interrupt throws an exception this is propagated.
Options is a list of the terms below. At least one of the terms
max/2 or repeating/2 must be present.
- max(+MaxInterval, :MaxHandler)
- Schedule a single interrupt calling MaxHandler at MaxInterval
milliseconds from now.
- repeating(+RepInterval, :RepHandler)
- Schedule a repeating interrupt calling RepHandler each
- Nested calls to timed_call/2 are transformed into calls to
nesting, a nested call raises a
- See also
- - call_with_time_limit/2, alarm/4, thread_signal/2.
- - This predicate is a generalization of the SWI-Prolog
library(time) interface. It is left in the XSB emulation because it
uses non-standard option syntax and the time is in milliseconds
where all SWI-Prolog time handling uses seconds.