Next: Multi Threaded Example, Up: Calling Prolog from Java [Contents][Index]
The following is a Java version of the train
example.
See Train Example for information about how the train.sav file is
created.
This code demonstrates the use of Jasper in single threaded mode. In
this mode only one thread can access the SICStus runtime via a
SICStus
object.
// Simple.java
import se.sics.jasper.SICStus; import se.sics.jasper.Query; import java.util.HashMap; public class Simple { public static void main(String argv[]) { SICStus sp; Query query; HashMap WayMap = new HashMap(); try { sp = new SICStus(argv,null); sp.restore("train.sav"); query = sp.openPrologQuery("connected('Örebro', 'Stockholm', Way, Way).", WayMap); try { while (query.nextSolution()) { System.out.println(WayMap); } } finally { query.close(); } } catch ( Exception e ) { e.printStackTrace(); } } }
It is assumed that the reader has read the section on Getting Started, which describes how to get the basics up and running.
This is how the example works:
SICStus
class. Each SICStus object correspond to one independent copy of the
SICStus runtime system (a rather heavy-weight entity).
In this example, we have specified null
as the second
argument to SICStus
. This instructs SICStus to search for
sprt.sav
using its own internal methods.
query
. The arguments
to this method are a string specifying a Prolog goal, and a
Map
, which will contain a mapping of variable names to
bindings. This method is for finding a single solution. Note that
the string is read by the Prolog reader, so it must conform to the
syntax rules for Prolog, including the terminating period. There
are two more methods for making queries: queryCutFail
, for
side effects only, and openQuery
to produce several
solutions through backtracking.
restore
. Corresponds to SP_restore()
in the
C-interface. See Loading Prolog Code. Note that this method must be
called before any other SICStus method is called. See the HTML Jasper
documentation for details.
openQuery
method returns a reference to a query, an
object implementing the Query
interface. To obtain solutions, the
method nextSolution
is called with no
arguments. nextSolution
returns true
as long as
there are more solutions, and the example above will print the value of
the Map WayMap
until there are no more solutions. Note that the
query must be closed, even if nextSolution
has indicated
that there are no more solutions.