У меня есть онтология, в которой я определяю два класса следующим образом:
(defclass A
(is-a USER)
(role concrete)
(single-slot TheB
(type INSTANCE)
(allowed-classes B)
(create-accessor read-write)))
(defclass B
(is-a USER)
(role concrete)
(single-slot Id
(type STRING)
(create-accessor read-write)))
Итак, я создаю экземпляр B [b] и другой экземпляр A [a], ссылающийся на [b]. Тогда у меня есть следующее правило:
(defrule myrule
?b <- (object (is-a B))
?a <- (object (is-a A)
(TheB ?y&:(= (str-compare (send ?b get-Id) (send ?y get-Id)) 0)))
=>
(printout t ?y " " ?b crlf)
(printout t (type ?y) " " (type ?b) crlf)
(printout t (eq ?y ?b) crlf)
(printout t ?a "->" (send ?a get-TheB) crlf)
)
Когда я бегу, я получаю следующий вывод:
[b] <Instance-b>
B B
FALSE
<Instance-a>->[b]
Может кто-нибудь объяснить мне, в чем разница между одним и другим? Почему у одного "<>", а у другого "[]", но тип одинаковый? Обязательно ли сравнивать идентификаторы? Я не могу получить <> из []?
Большое спасибо за внимание.