The current version of XSB does not fully support dynamic code.
In fact the declartion :- dynamic essentially instructs XSB to
fail on that code if it is undefined.
Currently the C foreign language interface does not work when
XSB is also compiled with the Oracle interface on Solaris.
Variables that appear in compiled arithmetic comparison
predicates should only be bound to numbers and not evaluable
arithmetic expressions. That is, the variables are not evaluated
to obtain an arithmetic value, but the XSB compiler assumes
that they are evaluated. For example, executing compiled code for
the following program will cause an "Arithmetic exception"
error:
p(X) :- X =:= 1.
?- p(cos(0)).
This behaviour is only exhibited in compiled code.
The reader cannot read an infix operator immediately followed
by a left parenthesis. In such a case you get a syntax error.
To avoid the syntax error just leave a blank between the infix
operator and the left parenthesis. For example, instead of
writing:
| ?- X=(a,b).
write:
| ?- X= (a,b).
The reader cannot properly read an operator defined as both a
prefix and an infix operator. For instance the declaration
:- op(1200,xf,'<=').
:- op(1200,xfx,'<=').
will lead to a syntax error.
When the code of a predicate is reloaded many times, if the old
code is still in use at the time of loading, unexpected errors may
occur, due to the fact that the space of the old code is reclaimed
and may be used for other purposes.
Currently, term comparisons (==,@<=,@<, @>, and @>=) do not work for terms that overflow the
C-recursion stack (terms that contain more than 10,000 variables
and/or function symbols).