2015-06-05 5 views
0

Недавно я прочитал документ, который использовал CLIPS для автоматического обнаружения. И в нем показан частичный код. Он показывает, что все defclasses принадлежат модулю MAIN. Но в других defmodules их defrules могут использовать эти defclass. В advanced.docx говорится, что «предопределенный модуль MAIN не импортирует и не экспортирует какие-либо конструкции». И я также показал в интерфейсах CLIPS.Как другие defmodules импортируют defclass и deftemplate из MAIN

Например:

(defclass MAIN::telemetry-data 
     (is-a USER) 
     (slot name(type SYMBOL)) 
     (slot predict-value(type SYMBOL NUMBER))) 



(defrule discrimination::analog-data-discriminate 
(object (is-a telemetry-data) (name ?name)) 
=> 
(printout t "name:"?name crlf) 
) 

Так как может использовать defrule объект телеметрической-данные без ошибок? Я знаю, что я могу определить класс в модуле дискриминации, чтобы выполнить право. Но я просто задаюсь вопросом, есть ли другие способы использовать конструкцию, определенную в модуле MAIN, другими defmodules.

спасибо!

ответ

1

Это соответствующий отрывок из раздела 10.1 Основного Руководства по программированию:

Все предопределенных классов системы (смотри раздел 9.2) относятся к основному модулю . Однако нет необходимости импортировать или экспортировать системные классы ; они всегда находятся в сфере охвата. Снижая предыдущее исключение , предопределенный модуль MAIN не импортирует и не экспортирует никаких конструкций . Однако, в отличие от других модулей, модуль MAIN может быть переопределен после запуска или команды clear.

Все, что вам нужно сделать, это переопределить основной модуль:

CLIPS> (clear) 
CLIPS> (defmodule MAIN (export ?ALL)) 
CLIPS> 
(defclass MAIN::telemetry-data 
    (is-a USER) 
    (slot predict-value)) 
CLIPS> 
(defmodule discrimination (import MAIN ?ALL)) 
CLIPS> 
(defrule discrimination::analog-data-discriminate 
    (object (is-a telemetry-data) (name ?name)) 
    => 
    (printout t "name: " ?name crlf)) 
CLIPS> 

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

+0

Got it. Спасибо, великий человек. Я твой супер фанат. –

 Смежные вопросы

  • Нет связанных вопросов^_^