This module provides partial compatibility with the XSB Prolog
- 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.
- 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.
- XSB tabled negation. According to the XSB manual, sk_not/1 is an old
name for not_exists/1. The predicates tnot/1 and not_exists/1 are
not precisely the same. We ignore that for now.
- 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.
- 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. Probably we should also cache the format
- 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.
The following predicates are re-exported from other modules
- 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/1, alarm/4, thread_signal/2.
- - This predicate is a generalization 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.
The following predicates are exported, but not or incorrectly documented.
- add_lib_dir(Arg1, Arg2)
- load_dync(Arg1, Arg2)
- fmt_write(Arg1, Arg2, Arg3)
- load_dyn(Arg1, Arg2)
- path_sysop(Arg1, Arg2, Arg3)