Пример 14.7. Родовая функция connect
(defgeneric connect)
(defmethod connect ((?out ONE-OUTPUT) (?in ONE-INPUT))
(send ?out put-output-1-link ?in)
(send ?out put-output-1-link-pin 1)
(send ?in put-input-1-link ?out)
(send ?in put-input-1-link-pin 1)
)
(defmethod connect ((?out ONE-OUTPUT) (?in TWO-INPUT) (?in-pin INTEGER))
(send ?out put-output-1-link ?in)
(send ?out put-output-1-link-pin ?in-pin)
(send ?in (sym-cat put-input- ?in-pin -link) ?out)
(send ?in (sym-cat put-input- ?in-pin -link-pin) 1)
)
(defmethod connect ((?out TWO-OUTPUT) (?out-pin INTEGER) (?in ONE-INPUT))
(send ?out (sym-cat put-output- ?out-pin -link) ?in)
(send ?out (sym-cat put-output- ?out-pin -link-pin) 1)
(send ?in put-input-1-link ?out)
(send ?in put-input-1-link-pin ?out-pin)
)
(defmethod connect ((?out TWO-OUTPUT) (?out-pin INTEGER)
(?in TWO-INPUT) (?in-pin INTEGER))
(send ?out (sym-cat put-output- ?out-pin -link) ?in)
(send ?out (sym-cat put-output- ?out-pin -link-pin) ?in-pin)
(send ?in (sym-cat put-input- ?in-pin -link) ?out)
(send ?in (sym-cat put-input- ?in-pin -link-pin) ?out-pin)
)
Приведенные выше методы родовой функции connect учитывают все возможные типы соединений логических аргументов. Используя эту родовую функцию, можно написать простую процедуру инициализации логической схемы, приведенной на рис. 14.2.
Пример 14.8. Инициализация логической схемы
(deffunction connect-circuit ()
(connect [S-1] [P-1])
(connect [S-2] [X-1] 2)
(connect [P-1] 1 [N-1])
(connect [P-1] 2 [O-1] 2)
(connect N-1] [O-1] 1)
(connect [O-1] [P-2])
(connect [P-2] 1 [L-1])
(connect [P-2] 2 [X-1] 1)
(connect [X-1] [L-2])
)
Применение описанного выше метода связывания элементов в логическую схему позволит разделить данные и методы их обработки. Каждая отдельная схема может быть расположена в отдельном файле и подгружаться к экспертной системе с помощью команды load.
Дополнительные функции и переменные
Для реализации логики экспертной системы CIOS, помимо описанных выше классов, объектов, функций и родовых функций, понадобятся также некоторые дополнительные элементы.
Прежде всего, добавим в систему следующие глобальные переменные:
Пример 14.9. Необходимые глобальные переменные
(defglobal ?*gray-code* = (create$)
?*sources* = (create$)
?*max-iterations* = 0)
Переменная max-iterations служит для хранения максимального числа итераций при переборе всевозможных комбинаций входных сигналов системы. В переменной sources хранятся имена всех источников текущей логической схемы. Переменная gray-code предназначена для хранения текущего кода Грея.
Ниже приведена вспомогательная функция, определяющая номер элемента в коде Грея, значение которого необходимо изменить для перебора всех возможных вариантов входных сигналов.
Дата добавления: 2021-12-14; просмотров: 255;