Может ли конструкция deftemplate иметь другой шаблон в слоте? - PullRequest
0 голосов
/ 09 июня 2019

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

(deftemplate fact
    (slot name)
    (multislot field)
    (multislot value))

Могу ли я указать это выше факт как слот / мультислот в другом шаблоне?

Например:

(deftemplate collection1
    (slot fact1))

(deftemplate collection2
    (slot fact1)
    (slot fact2))

В приведенном выше желаемом шаблоне каждый слот-факт должен иметь определенный шаблон fact . Я хочу иметь такую ​​коллекцию много количество слотов. Или, по крайней мере, желаемым результатом является утверждение collection с полями, подобными шаблону fact . Чтобы у меня была логическая связь между именем, полями и значениями.

(collection2
    (fact1 (name 'ID')
        (field 'Name' 'Company' 'Role')
        (value 'Bob' 'ABC' 'Admin'))
    (fact2 (name 'Event')
        (field 'Name' 'Place')
        (value 'Conference' 'USA')))

Ожидаемый результат : CLIPS может утверждать вышеупомянутый рекурсивный факт. Возможно ли это, или любая альтернатива проблемы.

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

1 Ответ

1 голос
/ 09 июня 2019

Конечно, вы можете также ограничить тип слота конкретным адресом факта.

(deftemplate fact
    (slot name)
    (multislot field)
    (multislot value))

(deftemplate collection
  (slot fact (type FACT-ADDRESS)))

(assert (collection (fact (assert (fact (name "ID")
                                        (field "Name" "Company" "Role")
                                        (value "Bob" "ABC" "Admin"))))))

Список фактов:

(facts)          

f-0     (initial-fact)
f-1     (fact (name "ID") (field "Name" "Company" "Role") (value "Bob" "ABC" "Admin"))
f-2     (collection (fact <Fact-1>))
...