2014-11-07 2 views
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 값이 아니라는 것을 의미합니다.

이 문제를 어떻게 해결할 수 있습니까? 감사!

답변

1

글쎄, 당신은 자바 자신의 ArrayList 클래스의 메소드를 호출해야 할 것이다. 간단한 방법은 test CE를 사용하는 것입니다

(defrule rule1 
    (Pizza (pizzaToppingList ?ptList) (OBJECT ?a)) 
    (PizzaTopping (name "T2") (OBJECT ?t2)) 
    (test (?ptList contains ?t2)) 
=> 
    (printout t "fired") 
) 

당신이 목록 및 해당 요소 중 하나가 무엇인지에 대해 동일한 바인딩 변수 ?t2을 사용하고 있기 때문에 당신이 작동하지 않을 수 있습니다 노력했다.

+0

답변을 사용하기 위해 묶었지만 "토큰에 슬롯 이름이 잘못되었습니다? ptList"와 같은 오류가 표시됩니다. – newnok6

+0

감사합니다! 나는 지금 "(eval (? ptList contains? t2))"에서 (test (? ptList contains? t2)) – newnok6

+0

로 바꾼다. 미안하다 - 테스트가되어야한다. (다른 시스템의 평가이다.) 내 대답을 편집했습니다. – laune

관련 문제