Как извлечь факты, утвержденные правилом, имеющим определенное имя? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть определенный шаблон, определенный следующим образом:

(deftemplate action
    (slot name)
    (slot field)
    (slot value))

У меня есть другие правила, которые будут использовать другие факты для подтверждения факта действия.

Теперь я хочу получить только факт с помощью действия шаблона.

Сейчас я использую find-fact для извлечения, но здесь я должен использовать запрос, который я не хочу предоставлять.

(find-fact ((?fact action)) (= (str-compare ?fact:name 'Action1') 0))

Мне нужны все факты с действием шаблона, и я не хочу писать цикл для всех имен с помощью Action1, Action2 и т. Д.

Заранее спасибо.

1 Ответ

1 голос
/ 14 июня 2019
         CLIPS (6.31 4/1/19)
CLIPS> 
(deftemplate action
    (slot name)
    (slot field)
    (slot value))
CLIPS> 
(deffacts actions
   (action (name Action1) (field x) (value 3))
   (action (name Action2) (field y) (value 4))
   (action (name Action3) (field z) (value 5)))
CLIPS>        
(defrule find-Action1
   (action (name Action1))
   =>)
CLIPS> (reset)
CLIPS> (agenda)
0      find-Action1: f-1
For a total of 1 activation.
CLIPS> (facts)
f-0     (initial-fact)
f-1     (action (name Action1) (field x) (value 3))
f-2     (action (name Action2) (field y) (value 4))
f-3     (action (name Action3) (field z) (value 5))
For a total of 4 facts.
CLIPS> 
...