1
고유 한 고유 인스턴스 쌍에 대해 정확히 한 번 규칙을 트리거하려고 시도하고 있습니다.고유 한 인스턴스 바인딩 순서
일반의 예는 다음과 같습니다
(defclass USER_THING (is-a USER))
(definstances KNOWN_THINGS
(thing-a of USER_THING)
(thing-b of USER_THING)
(thing-c of USER_THING))
(defrule match-things
?thing0 <- (object (is-a USER_THING))
?thing1 <- (object (is-a USER_THING))
=>
(printout t "-------" crlf)
(printout t "thing0 " (instance-name ?thing0) crlf)
(printout t "thing1 " (instance-name ?thing1) crlf))
을 분명히, 우리는 자체 KNOWN_THINGS
의 직교 제품을 기대하는, 우리가 무엇을 얻을 정확히 어떤 :
CLIPS> (reset) CLIPS> (run) ------- thing0 [thing-c] thing1 [thing-c] ------- thing0 [thing-c] thing1 [thing-b] ------- thing0 [thing-c] thing1 [thing-a] ------- thing0 [thing-a] thing1 [thing-c] ------- thing0 [thing-b] thing1 [thing-c] ------- thing0 [thing-b] thing1 [thing-b] ------- thing0 [thing-b] thing1 [thing-a] ------- thing0 [thing-a] thing1 [thing-b] ------- thing0 [thing-a] thing1 [thing-a]
동안 유사 :
CLIPS> (reset) CLIPS> (run) ------- thing0 [thing-a] thing1 [thing-b] ------- thing0 [thing-a] thing1 [thing-c] ------- thing0 [thing-b] thing1 [thing-c]
나는 Apache Jena의 앞으로의 경험이있다.
(defrule match-things
?thing0 <- (object (is-a USER_THING))
?thing1 <- (object (is-a USER_THING))
(> (str-compare (instance-name ?thing0) (instance-name ?thing1)) 0)
=>
(printout t "-------" crlf)
(printout t "thing0 " (instance-name ?thing0) crlf)
(printout t "thing1 " (instance-name ?thing1) crlf))
이 적절한 클립 규칙되지 않습니다 : 단순히 인스턴스 이름에 임의의 순서를 적용하는 규칙 조항을 추가 할 것 항에있어서, 추론 시스템을 -chaining. 원하는 효과를 얻기 위해 무엇을 할 수 있습니까? 이를 용이하게하기 위해 필요에 따라 인스턴스에 정보 (예 : 임의의 숫자 또는 문자열 식별자)를 추가 할 수 있습니다.