public class SICStus extends java.lang.Object implements Prolog
This class uses native
methods to interface with the C-Prolog
interface of SICStus Prolog. Hence, this class cannot be used from within an
applet.
You should not inherit from SICStus
.
Constructor and Description |
---|
SICStus()
Creates a SICStus object.
|
SICStus(java.lang.String bootPath)
Deprecated.
Use
SICStus() instead. |
SICStus(java.lang.String[] argv)
Creates a SICStus object.
|
SICStus(java.lang.String[] argv,
java.lang.String bootPath)
Deprecated.
Use, the equivalent,
SICStus(String[]) instead. |
Modifier and Type | Method and Description |
---|---|
Term |
consFunctor(java.lang.String functor,
Term[] args)
Creates a term initialized to a compound term.
|
Term |
consList(Term head,
Term tail)
Creates a term initialized to a list with given head and tail.
|
int |
debugLevel()
Currently Unsupported; see the Release Notes.
|
static SICStus |
getCaller()
Returns the SICStus object corresponding to the SICStus runtime that called
us.
|
static SICStus |
getInitializedSICStus()
Deprecated.
do not use.
|
se.sics.jasper.Server |
getServer()
For internal use by Jasper.
|
void |
init()
Does nothing.
|
Term |
listFromString(java.lang.String str)
Creates a term initialized to a list of character codes from a Java
String . |
void |
load(java.lang.String file)
Interface to
SP_load() , which in turn calls the Prolog predicate
load_files/[1,2] (See the User's
Manual). |
static void |
main(java.lang.String[] argv)
This main-function is just a small test function.
|
Term |
newObjectTerm(java.lang.Object obj)
Creates a term initialized to a *global* reference to a Java object.
|
Prolog |
newProlog()
Returns the Prolog interface for this SICStus object.
|
Term |
newTerm()
Creates a null-term (i.e. the empty list, '[]').
|
Term |
newTerm(double d)
Creates a term initialized to a Prolog float.
|
Term |
newTerm(java.lang.Double d) |
Term |
newTerm(float f)
Creates a term initialized to a Prolog float.
|
Term |
newTerm(java.lang.Float f) |
Term |
newTerm(int i)
Creates a term initialized to a Prolog integer from a Java
int . |
Term |
newTerm(java.lang.Integer i) |
Term |
newTerm(long j)
Creates a term initialized to a Prolog integer from a Java
long . |
Term |
newTerm(java.lang.Long j) |
Term |
newTerm(java.lang.String a)
Creates a term initialized to a Prolog atom.
|
Term |
newTerm(java.lang.String functor,
Term[] args)
Creates a term initialized to a Prolog compound term.
|
Term |
newTerm(Term t)
Creates a term initialized to an existing term.
|
Term |
newVariable()
Creates a term initialized to an unbound variable.
|
Term |
numberFromString(java.lang.String str)
Creates a term initialized to a Prolog number from a string.
|
Query |
openPrologQuery(java.lang.String string,
java.util.Map<java.lang.String,? extends Term> varMap)
Opens a query, specified as a string, for obtaining multiple solutions.
|
SPQuery |
openQuery(SPPredicate pred,
SPTerm[] args)
Deprecated.
Use module and predicate name directly instead
(
openQuery(String, String, SPTerm[]) ). |
SPQuery |
openQuery(java.lang.String string,
java.util.Map<java.lang.String,? extends Term> varMap)
Opens a query, specified as a string, for obtaining multiple solutions.
|
SPQuery |
openQuery(java.lang.String module,
java.lang.String name,
SPTerm[] args)
Opens a query for obtaining multiple solutions.
|
Term |
prologReadFromString(java.lang.String string,
java.util.Map<java.lang.String,? extends Term> varMap)
Creates a term by reading from a string.
|
boolean |
query(SPPredicate pred,
SPTerm[] args)
Deprecated.
Use module and predicate name directly instead
(
query(String, String, SPTerm[]) ). |
boolean |
query(java.lang.String string,
java.util.Map<java.lang.String,? extends Term> varMap)
Finds the first solution to a query specified as a string.
|
boolean |
query(java.lang.String module,
java.lang.String name,
SPTerm[] args)
Finds the first solution to a query.
|
boolean |
queryCutFail(SPPredicate pred,
SPTerm[] args)
Deprecated.
Use module and predicate name directly instead
(
queryCutFail(String, String, SPTerm[]) ). |
boolean |
queryCutFail(java.lang.String string,
java.util.Map<java.lang.String,? extends Term> varMap)
Finds the first solution to a query specified as a string, then cuts away any
choice points and fails, i.e. ignores everything but the side-effects during
the first solution.
|
boolean |
queryCutFail(java.lang.String module,
java.lang.String name,
SPTerm[] args)
Finds the first solution to a query, then cuts away any choicepoints and
fails, i.e. ignores everything but the side-effects during the first
solution.
|
SPTerm |
readFromString(java.lang.String string)
Equivalent to readFromString(string, null);
|
SPTerm |
readFromString(java.lang.String string,
java.util.Map<java.lang.String,? extends Term> varMap)
Creates a term by reading from a string.
|
void |
restore(java.lang.String savFile)
Interface to
SP_restore() . |
boolean |
reuseTermRefs()
Unsupported.
|
int |
setDebugLevel(int level)
Currently Unsupported.
|
int |
setPrintDepth(int level)
Currently Unsupported.
|
boolean |
setReuseTermRefs(boolean newVal)
Unsupported; see the release notes for details.
|
void |
setServer(se.sics.jasper.Server s)
For internal use by Jasper.
|
boolean |
setShouldCheckAge(boolean newVal)
Currently Unsupported; see the release notes for details.
|
boolean |
shouldCheckAge()
Currently Unsupported; see the release notes for details.
|
void |
startServer()
Starts serving requests from a Prolog client.
|
void |
stopServer()
Stops the server.
|
public SICStus() throws SPException
SICStus(null,null)
.SPException
- Something went wrong during startup.SPException
,
SICStus(String[],String)
@Deprecated public SICStus(java.lang.String bootPath) throws SPException
SICStus()
instead.bootPath
- IgnoredSPException
- Something went wrong during startup.public SICStus(java.lang.String[] argv) throws SPException
SP_initialize(argc, argv, options)
. It initializes the
emulator's memory manager, allocates WAM memory areas, etc. It also loads the
SICStus Runtime Library ( sprt.sav
), also known as the
bootfile. If the bootfile cannot be found, you may specify the exact
location of it by using the system property sicstus.path
. If you need
to set sicstus.path
, it should be set to the parent directory of the
directory where the Runtime Library is located.
Any (Java) system property se.sics.sicstus.property.
NAME will
be passed to the created SICStus instance as the (Prolog) system property
NAME.
argv
- Argument vector to the emulator.SPException
- Something went wrong during startup.getInitializedSICStus()
@Deprecated public SICStus(java.lang.String[] argv, java.lang.String bootPath) throws SPException
SICStus(String[])
instead.argv
- Argument vector to the emulator.bootPath
- Ignored.SPException
- Something went wrong during startup.public final boolean shouldCheckAge()
setShouldCheckAge(boolean)
public final boolean setShouldCheckAge(boolean newVal)
true
then the methods on SPTerm
will throw exceptions when used in a way that may potentially create dangling
pointers in the Prolog heap. Returns the old value of the flag.
Off by default in the interest of backward compatibility since it will throw exception for some legal code. It is probably a good idea to turn this on for new code (and for existing non-production code). This flag will probably be on by default in the future, please try it and report good or bad experiences.
Can be set with the SICStus.checkSPTermAge
system property.
newVal
- Undocumentedpublic final boolean reuseTermRefs()
setReuseTermRefs(boolean)
public final boolean setReuseTermRefs(boolean newVal)
false
then SPTerm.delete()
will not make the SP_term_ref associated with the deleted
SPTerm
object available for re-use. Returns the old value of the
flag.
This flag is currently on by default, there should be no
reason to turn it off.
Can be set with the SICStus.reuseTermRefs
system property.
newVal
- Undocumentedpublic final int debugLevel()
setDebugLevel(int)
public int setDebugLevel(int level)
SICStus.debugLevel
system propery.level
- Undocumentedpublic static void main(java.lang.String[] argv)
argv
- the command line argumentsSICStus()
@Deprecated public static SICStus getInitializedSICStus()
Deprecated, avoid use. This method tries to do something sensible if there are multiple sicstus objects and will work as expected if each SICStus is created in its own thread.
public void load(java.lang.String file) throws SPException
SP_load()
, which in turn calls the Prolog predicate
load_files/[1,2] (See the User's
Manual). Note: The preferred way to load Prolog code is
through restore
.file
- The Prolog code to load. This can be a .pl-file, or a .po-file.SPException
- A Prolog exception was thrown.restore(java.lang.String)
public void restore(java.lang.String savFile) throws SPException
SP_restore()
. Restores the specified .sav-file.
This is the preferred way of loading Prolog code instead of using
load
. This method must be called before
any other SICStus method is called, and may only be used if the SICStus
object has been created with new
. Note that calling this method
will unload all foreign resources.
Example:
% sicstus SICStus 3.7 beta3: Tue Jun 02 12:29:02 MET DST 1998 | ?- compile(bench),save_program('bench.sav'). {compiling /home/jojo/sicstus/sicstus3/bench.pl...} {/home/jojo/sicstus/sicstus3/bench.pl compiled, 90 msec 6384 bytes} {SICStus state saved in /home/jojo/sicstus/sicstus3/bench.sav} yes | ?- halt.and then restore
bench.sav
from Java by calling
SICStus.restore()
.
restore("bench.sav");
savFile
- The .sav-file to restore.SPException
- if an Prolog exception was thrownload(java.lang.String)
public int setPrintDepth(int level)
toString
method of the class SPException
returns).level
- The new maximum print depth for exception terms.SICStus.printDepth
system property.
The default value is 5.public boolean query(java.lang.String module, java.lang.String name, SPTerm[] args) throws SPException, IllegalTermException
openQuery
.module
- The module used for the query.name
- The predicate name used for the query.args
- The arguments to the predicate. The number of arguments must match
the functor of the predicate.SPException
- If a Prolog exception was thrown.IllegalTermException
- and invalid term was detected and invalid term was detectedopenQuery(java.lang.String, java.lang.String, se.sics.jasper.SPTerm[])
,
SPException
,
SPTerm
public boolean query(java.lang.String string, java.util.Map<java.lang.String,? extends Term> varMap) throws SPException
openQuery
.query
in interface Prolog
string
- The goal to use for the query, with terminating period.varMap
- The arguments to the predicate as a map from variable names to
SPTerm objects. On success varMap will get entries added for all
variables (with names not starting with underscore) in the goal
that were not already present as input. May be null.
Allocates one SPTerm
for each entry added to the
map (and, possibly, a small number of SPTerm objects for internal
use). If varMap is null then this method behaves as if no SPTerm
objects were created.SPException
- If a Prolog exception was thrown.openQuery(java.lang.String, java.lang.String, se.sics.jasper.SPTerm[])
,
queryCutFail(java.lang.String, java.lang.String, se.sics.jasper.SPTerm[])
,
SPTerm
@Deprecated public boolean query(SPPredicate pred, SPTerm[] args) throws SPException, IllegalTermException
query(String, String, SPTerm[])
).openQuery
.pred
- The predicate object to use for the query.args
- The arguments to the predicate. The number of arguments must match
the functor of the predicate.SPException
- If a Prolog exception was thrown.IllegalTermException
- and invalid term was detected and invalid term was detectedopenQuery(java.lang.String, java.lang.String, se.sics.jasper.SPTerm[])
,
SPException
,
SPPredicate
,
SPTerm
public boolean queryCutFail(java.lang.String module, java.lang.String name, SPTerm[] args) throws SPException
module
- The module used for the query.name
- The predicate name used for the query.args
- The arguments to the predicate.SPException
- if an Prolog exception was thrownSPException
public boolean queryCutFail(java.lang.String string, java.util.Map<java.lang.String,? extends Term> varMap) throws SPException
queryCutFail
in interface Prolog
string
- The goal to use for the query, with terminating period.varMap
- The arguments to the predicate as a map from variable names to
SPTerm objects. May be null. No bindings are added.SPException
query(java.lang.String, java.lang.String, se.sics.jasper.SPTerm[])
@Deprecated public boolean queryCutFail(SPPredicate pred, SPTerm[] args) throws SPException
queryCutFail(String, String, SPTerm[])
).pred
- The predicate object used for the query.args
- The arguments to the predicate. The number of arguments must match
the functor of the predicate.SPException
- if an Prolog exception was thrownSPException
,
SPPredicate
public SPQuery openQuery(java.lang.String module, java.lang.String name, SPTerm[] args) throws IllegalTermException, SPException
nextSolution
to do that. When no more solutions are needed, the query must be closed using
methods close
or cut
on the
query-object.
Multiple queries can be open at the same time. See
nextSolution
for details and restrictions.
module
- The module used for the query.name
- The predicate name used for the query.args
- The arguments to the predicate. The number of arguments must match
the functor of the predicate.query
object.IllegalTermException
- and invalid term was detectedSPException
- if an Prolog exception was thrownSPQuery.nextSolution()
,
SPQuery.close()
,
SPQuery.cut()
public SPQuery openQuery(java.lang.String string, java.util.Map<java.lang.String,? extends Term> varMap) throws SPException
nextSolution
to do that. When no more solutions
are needed, the query must be closed using methods close
or cut
on the query-object.
Multiple queries can be open at the same time. See
nextSolution
for details and restrictions.
Allocates one SPTerm
for each entry added to the map (and,
possibly, a small number of SPTerm objects for internal use). If varMap is
null then this method behaves as if no SPTerm objects were created. When the
query is closed (or cut) then all SPTerm objects are reclaimed.
string
- The goal to use for the query, with terminating period.varMap
- The arguments to the predicate as a map from variable names to
SPTerm objects. The map will get entries added for all variables
(with names not starting with underscore) in the goal that were
not already present as input. May be null.query
object.SPException
- if an Prolog exception was thrownSPQuery.nextSolution()
,
SPQuery.close()
,
SPQuery.cut()
@Deprecated public SPQuery openQuery(SPPredicate pred, SPTerm[] args) throws IllegalTermException, SPException
openQuery(String, String, SPTerm[])
).nextSolution
to do that. When no more solutions are needed, the query must be closed using
methods close
or cut
on the
query-object.
Multiple queries can be open at the same time. See
nextSolution
for details and restrictions.
pred
- The predicate-object to open a query on.args
- The arguments to the predicate. The number of arguments must match
the functor of the predicate.query
object.IllegalTermException
- and invalid term was detectedSPException
- if an Prolog exception was thrownSPQuery.nextSolution()
,
SPQuery.close()
,
SPQuery.cut()
,
SPPredicate
public SPTerm readFromString(java.lang.String string, java.util.Map<java.lang.String,? extends Term> varMap) throws SPException
string
- The printed representation of the term, with terminating period.varMap
- Bindings for any variables occurring in the term, as a map from
variable names to SPTerm objects. The map will get entries added
for all variables (with names not starting with underscore) in the
term that were not already present as input. May be null.
Allocates one SPTerm
for each entry added to the
map (and, possibly, a small number of SPTerm objects for internal
use). If varMap is null then this method behaves as if only the
returned SPTerm object were created.SPException
- if an Prolog exception was thrownpublic SPTerm readFromString(java.lang.String string) throws SPException
string
- The printed representation of the term, with terminating period.SPException
- if an Prolog exception was thrownpublic Query openPrologQuery(java.lang.String string, java.util.Map<java.lang.String,? extends Term> varMap) throws SPException
Prolog
nextSolution
to do that. When no
more solutions are needed, the query must be closed using methods
close
or cut
on the query-object.
Multiple queries can be open at the same time. See
nextSolution
for details and
restrictions.
openPrologQuery
in interface Prolog
string
- The goal to use for the query, with terminating period.varMap
- The arguments to the predicate as a map from variable names to
Term objects. The map will get entries added for all variables
(with names not starting with underscore) in the goal that were
not already present as input. May be null.
The passed argument should be a Map<String,Term>
. It uses
a different type in order to avoid warnings with old client code.
query
object.SPException
Query.nextSolution()
,
Query.close()
,
Query.cut()
public Term prologReadFromString(java.lang.String string, java.util.Map<java.lang.String,? extends Term> varMap) throws SPException
Prolog
prologReadFromString
in interface Prolog
string
- The printed representation of the term, with terminating period.varMap
- Bindings for any variables occurring in the term, as a map from
variable names to Term objects. The map will get entries added for
all variables (with names not starting with underscore) in the
term that were not already present as input. May be null.
The passed argument should be a Map<String,Term>
. It uses
a different type in order to avoid warnings with old client code.
SPException
public Term newTerm()
Prolog
public Term newTerm(Term t) throws IllegalTermException, ConversionFailedException
Prolog
newTerm
in interface Prolog
t
- The Term object whose term to useIllegalTermException
ConversionFailedException
public Term newTerm(java.lang.Integer i)
i
- initial value of the termpublic Term newTerm(int i)
Prolog
int
.public Term newTerm(java.lang.Long j) throws IllegalTermException, ConversionFailedException
j
- initial value of the termIllegalTermException
- an invalid term was detectedConversionFailedException
- the argument could not be converted to a termpublic Term newTerm(long j) throws IllegalTermException, ConversionFailedException
Prolog
long
.newTerm
in interface Prolog
j
- Initial value of the integer (long).IllegalTermException
ConversionFailedException
public Term newTerm(java.lang.Double d)
d
- the non-null valuepublic Term newTerm(double d)
Prolog
public Term newTerm(java.lang.Float f)
f
- initial value of the termpublic Term newTerm(float f)
Prolog
public Term newTerm(java.lang.String a) throws ConversionFailedException
Prolog
newTerm
in interface Prolog
a
- String describing the initial value of the atom.ConversionFailedException
public Term newTerm(java.lang.String functor, Term[] args) throws ConversionFailedException, IllegalTermException
Prolog
newTerm
in interface Prolog
functor
- The functor of the compound term as a stringargs
- The arguments as an array of TermsConversionFailedException
IllegalTermException
public Term newVariable() throws ConversionFailedException, IllegalTermException
Prolog
newVariable
in interface Prolog
ConversionFailedException
IllegalTermException
public Term consFunctor(java.lang.String functor, Term[] args) throws ConversionFailedException, IllegalTermException
Prolog
consFunctor
in interface Prolog
functor
- The term's name as a Java String
args
- The arguments of the termConversionFailedException
IllegalTermException
public Term consList(Term head, Term tail) throws ConversionFailedException, IllegalTermException
Prolog
consList
in interface Prolog
head
- The head of the listtail
- The tail of the listConversionFailedException
IllegalTermException
public Term newObjectTerm(java.lang.Object obj) throws IllegalTermException, ConversionFailedException
Prolog
newObjectTerm
in interface Prolog
obj
- A reference to a Java object.IllegalTermException
- an invalid term was detectedConversionFailedException
- the argument could not be converted to a termpublic Term numberFromString(java.lang.String str) throws ConversionFailedException, IllegalTermException
Prolog
numberFromString
in interface Prolog
str
- The string containing the printed representation of the number.ConversionFailedException
- the argument could not be converted to a termIllegalTermException
- an invalid term was detectedpublic Term listFromString(java.lang.String str) throws ConversionFailedException, IllegalTermException
Prolog
String
.listFromString
in interface Prolog
str
- The string of characters.ConversionFailedException
- the argument could not be converted to a termIllegalTermException
- an invalid term was detectedpublic Prolog newProlog() throws java.lang.InterruptedException
Prolog
) interface for this SICStus object, and return the new client.
The server may be started by calling startServer()
java.lang.InterruptedException
- if the thread was interruptedpublic static SICStus getCaller()
public void startServer()
stopServer()
. Before calling this
method you should call newProlog()
and hand the result over to
another Thread
.public void stopServer()
Thread
running in the startServer()
method to return.public se.sics.jasper.Server getServer()
Prolog
public void setServer(se.sics.jasper.Server s)
s
- Undocumentedpublic void init()