Cześć, jestem nowy w silniku reguł klipów i muszę śledzić w klipach w aplikacji mobilnej (Android / Kotlin). używamy biblioteki CLIPS4android jako opakowania JNI.
Jak uzyskać dane wyjściowe z pliku klasy, gdy reguła zostanie wykonana przez wywołanie clips.run ()
Class RulesTest (filepath: String?) {private val clips: Environment fun stop () {clips.destroy ()}
/**
* Example of how to use "assert".
* @throws CLIPSError
*/
@Throws(CLIPSError::class)
fun assertItems(products: List<Item>) {
for (product in products) {
Log.d(tag, "(Product " + "(productId " + product.ProductId + ")" + "(uomid " + product.UOMId + " )" + "(quantity " + product.Quantity + " ))")
var InsertItem: String
InsertItem = "(Product " + "(productId " + product.ProductId + ")" + "(uomid " + product.UOMId + " )" + "(quantity " + product.Quantity + " ))"
clips.assertString(InsertItem)
}
}
fun run() {
clips.eval("(facts)");
clips.run()
}
companion object {
const val tag = "CLIPSProductRulesTest"
}
init {
clips = Environment()
clips.load(filepath)
Log.d(tag, "Loading .clp...\n\n")
clips.reset()
}
}
1 odpowiedź
W wersji 0.4 CLIPSJNI można zdefiniować implementację klasy Router, aby przechwytywać dane wyjściowe, a następnie można robić, co tylko zechcesz z danymi wyjściowymi w metodzie drukowania implementacji.
import CLIPSJNI.*;
class Example
{
static class CaptureRouter implements Router
{
public int getPriority()
{
return 10;
}
public String getName()
{
return "grab";
}
public boolean query(
String logName)
{
if (logName.equals("wwarning") ||
logName.equals("werror") ||
logName.equals("wtrace") ||
logName.equals("wdialog") ||
logName.equals("wprompt") ||
logName.equals("wdisplay") ||
logName.equals("stdout"))
{ return true; }
return false;
}
public void print(
String routerName,
String printString)
{
System.out.print(printString);
}
public int getchar(
String routerName)
{
return -1;
}
public int ungetchar(
String routerName,
int theChar)
{
return -1;
}
public boolean exit(
int exitCode)
{
return true;
}
}
public static void main(String args[])
{
Environment clips;
clips = new Environment();
clips.addRouter(new CaptureRouter());
clips.build("(defrule hello => (printout t \"Hello World!\" crlf))");
clips.reset();
clips.run();
}
}
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.