これが私の主な方法です。
public static void main(String[] args) throws JessException {
Rete engine = new Rete();
engine.batch("template.clp");
PizzaBase pizzaBase = new PizzaBase();
pizzaBase.setSize(9);
PizzaTopping pizzaTopping = new PizzaTopping();
pizzaTopping.setName("T1");
PizzaTopping pizzaTopping2 = new PizzaTopping();
pizzaTopping2.setName("T2");
PizzaTopping pizzaTopping3 = new PizzaTopping();
pizzaTopping3.setName("T3");
List<PizzaTopping> pizzaToppingList = new ArrayList<PizzaTopping>();
pizzaToppingList.add(pizzaTopping);
pizzaToppingList.add(pizzaTopping2);
pizzaToppingList.add(pizzaTopping3);
Pizza pizza = new Pizza();
pizza.setBase(pizzaBase);
pizza.setPizzaToppingList(pizzaToppingList);
engine.add(pizzaBase);
engine.addAll(pizzaToppingList);
engine.add(pizza);
engine.eval("(facts)");
engine.batch("rules.clp");
engine.reset();
engine.run();
engine.eval("(facts)");
}
PizzaToppingListでトッピング名が「T2」であるピザをチェックしたいのですが、以下にルールを示します。
(defrule rule1
(Pizza (pizzaToppingList ?t2) (OBJECT ?a))
(PizzaTopping (name "T2") (OBJECT ?t2))
=>
(printout t "fired")
)
しかし、JESS では、pizzaToppingList のスロット値は ArrayList(Java オブジェクト) であるため、機能しません。これは、pizzaToppingList スロットが JESS の Lists 値ではないことを意味します。
この問題を解決するにはどうすればよいですか? 感謝!