## com.declarativa.interprolog
Class SubprocessEngine

    java.lang.Object
      |
      +--com.declarativa.interprolog.PrologEngine
            |
            +--com.declarativa.interprolog.SubprocessEngine

public class SubprocessEngine
extends PrologEngine

A PrologEngine implemented over TCP/IP sockets. A SubprocessEngine object represents and gives access to a running Prolog process in background. Multiple instances correspond to multiple Prolog processes, outside the Java Virtual Machine.

Field Summary

Fields inherited from class com.declarativa.interprolog.PrologEngine
`firstJavaMessageName, interrupting, MAX_INT_VALUE, MIN_INT_VALUE, nl, startPrologCommand, version`

Constructor Summary
`SubprocessEngine(String startPrologCommand)`
`SubprocessEngine(String startPrologCommand, boolean debug)` Construct a SubprocessEngine, launching a Prolog process in background.

Method Summary
`void` `addPrologOutputListener(PrologOutputListener client)` Add a PrologOutputListener to this engine.
`void` `addPrologStderrListener(OutputListener l)`
`void` `addPrologStdoutListener(OutputListener l)` Add a OutputListener to get output from Prolog's standard output.
`Object[]` `deterministicGoal(String G, String OVar, Object[] objectsP, String RVars)` Synchronously calls a Prolog goal.
`boolean` `isAvailable()` Prolog is thought to be idle
`void` `removePrologOutputListener(PrologOutputListener client)`
`void` `removePrologStderrListener(OutputListener l)`
`void` `removePrologStdoutListener(OutputListener l)`
`void` `sendAndFlush(String s)` Sends a String to Prolog's input.
`void` `sendAndFlushLn(String s)`
`void` `shutdown()` Shuts down the background Prolog process as well as the dependent Java threads.

Methods inherited from class com.declarativa.interprolog.PrologEngine

`abortTasks, assignableType, command, consultFromPackage, consultRelative, deterministicGoal, deterministicGoal, deterministicGoal, doCallback, findConstructor, findMethod, firstJavaMessage, getJarDirectory, getJarDirectory, getRealJavaObject, getRealJavaObject, getRealJavaObject, handleCallback, interrupt, interruptTasks, isDebug, isIdle, load_dynRelative, makeInvisible, printBindings, progressMessage, registerJavaObject, setDebug, shortClassName, teachMoreObjects, teachMoreObjects, teachOneObject, waitUntilAvailable, waitUntilIdle`

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### SubprocessEngine

    public SubprocessEngine(String startPrologCommand,
                            boolean debug)

  Construct a SubprocessEngine, launching a Prolog process in background.

Parameters:
  `startPrologCommand` - The command to launch Prolog, as if given from a console shell. Must not be null.
  `debug` - If true this engine will send debugging messages to System.out
See Also:
  `shutdown()`, `PrologEngine.teachMoreObjects(ObjectExamplePair[])`, `PrologEngine.setDebug(boolean)`

### SubprocessEngine

    public SubprocessEngine(String startPrologCommand)

Method Detail

### addPrologOutputListener

    public void addPrologOutputListener(PrologOutputListener client)

  Add a PrologOutputListener to this engine. All stdout and stderr output will be routed to the client.

  Parameters:
    `client` - An object interested in receiving messages depicting Prolog's progress
  See Also:
    `PrologOutputListener`

### removePrologOutputListener

    public void removePrologOutputListener(PrologOutputListener client)

### addPrologStdoutListener

    public void addPrologStdoutListener(OutputListener l)

  Add a OutputListener to get output from Prolog's standard output. This is a lower level interface than addPrologOutputListener(PrologOutputListener).

  See Also:
    `OutputListener`

### addPrologStderrListener

    public void addPrologStderrListener(OutputListener l)

### removePrologStdoutListener

    public void removePrologStdoutListener(OutputListener l)

### removePrologStderrListener

    public void removePrologStderrListener(OutputListener l)

### isAvailable

    public boolean isAvailable()

  Prolog is thought to be idle

  Overrides:
    `isAvailable` in class `PrologEngine`

### shutdown

    public void shutdown()

  Shuts down the background Prolog process as well as the dependent Java threads.

  Specified by:
    `shutdown` in class `PrologEngine`

### sendAndFlush

    public void sendAndFlush(String s)

  Sends a String to Prolog's input. Its meaning will naturally depend on the current state of Prolog: it can be a top goal, or input to an ongoing computation

### sendAndFlushLn

    public void sendAndFlushLn(String s)

### deterministicGoal

    public Object[] deterministicGoal(String G,
                                      String OVar,
                                      Object[] objectsP,
                                      String RVars)

  Description copied from class: `PrologEngine`
  Synchronously calls a Prolog goal. Only the first solution is considered. G should contain a syntactically correct Prolog term, without the trailing dot (.). Throws an IPAbortedException if a Prolog abort happens, and an IPInterruptedException if the interrupt() method was invoked.

  Overrides:
    `deterministicGoal` in class `PrologEngine`
  Parameters:
    `G` - Prolog goal term
    `OVar` - Prolog variable that will be bound to objectsP array
    `objectsP` - Array of Java objects to pass to Prolog goal
    `RVars` - Prolog list with object specifications, typically containing variables occurring in g. If null a single binding will be returned, containing a TermModel object representing the goal term solution
  Returns:
    a new array containing an object for each term in the rVars list, or null if goal fails
  See Also:
    `PrologEngine.deterministicGoal(String)`, `PrologEngine.deterministicGoal(String,String)`, `PrologEngine.deterministicGoal(String,String,Object[])`