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()
}

}

0
NishaL 19 grudzień 2019, 12:41
Nie jest jasne, co rozumiesz przez „wyjście z pliku klasy”.
 – 
Gary Riley
19 grudzień 2019, 19:56
: Właściwie uruchamiamy klipy w Androidzie za pomocą biblioteki CLIPS4android, patrz powyżej jest to klasa, której używam
 – 
NishaL
20 grudzień 2019, 10:01
Jestem w stanie uruchomić reguły za pomocą funkcji Clips.run(). Ale dane wyjściowe reguły są rejestrowane tylko w logcat. Nie ma funkcji pobierania danych wyjściowych.
 – 
NishaL
20 grudzień 2019, 10:08

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();
     }  
  }
0
Gary Riley 20 grudzień 2019, 22:24