0
이것이 내 주요 방법입니다.JESS에서 ArrayList Object (Java 클래스)를 비교하는 방법은 무엇입니까?
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 (자바 객체)입니다. 이것은 pizzaToppingList 슬롯이 JESS의 Lists 값이 아니라는 것을 의미합니다.
이 문제를 어떻게 해결할 수 있습니까? 감사!
답변을 사용하기 위해 묶었지만 "토큰에 슬롯 이름이 잘못되었습니다? ptList"와 같은 오류가 표시됩니다. – newnok6
감사합니다! 나는 지금 "(eval (? ptList contains? t2))"에서 (test (? ptList contains? t2)) – newnok6
로 바꾼다. 미안하다 - 테스트가되어야한다. (다른 시스템의 평가이다.) 내 대답을 편집했습니다. – laune