Разработка интеллектуальных информационных систем с использованием CLIPS. Дякин В.Н. - 10 стр.

UptoLike

Составители: 

CLIPS> (print-args a b c d)
a b and 2 extras: (c d)
CLIPS> (print-args a)
[ARGACCESS4] Function print-args expected at least 2 argument(s)
CLIPS>
В данном примере с помощью конструктора deffunction определяется функция print-args, которая принимает два обяза-
тельных параметра: ?а и ?b, и имеет групповой параметр $?с. Функция выводит на экран свои обязательные параметры, а
также число полей в составном параметре и его содержимое.
При вызове функции интерпретатор CLIPS последовательно выполняет действия в порядке, заданном конструктором.
Функция возвращает значение, равное значению, которое вернуло последнее действие или вычисленное выражение. Если
последнее действие не вернуло никакого результата, то выполняемая функция также не вернет результата (как в приведен-
ном выше примере). Если функция не выполняет никаких действий, то возвращенное значение равно FALSE.
В случае воз-
никновения ошибки при выполнении очередного действия выполнение функции будет прервано и возвращенным значением
также будет FALSE.
Функции могут быть само- и взаимно рекурсивными. Саморекурсивная функция просто вызывает сама себя из списка
своих собственных действий. В качестве примера можно привести функцию, вычисляющую факториал.
(deffuction factorial (?a)
(if (or (not (integerp ?a)) (< ?a 0)) then
(printout t "Factorial error! " crlf)
else
(if (= ?a 0) then 1 else
(* ?a (factorial (- ?a 1))))))
Взаимная рекурсия между двумя функциями требует предварительного объявления одной из этих функций. Для пред-
варительного объявлении функции в CLIPS используется конструктор deffunction с пустым списком действий. В следующем
примере функция foo предварительно объявлена и таким образом может быть вызвана из функции bar. Окончательная реали-
зация функции foo выполнена конструктором после объявления функции bar.
(deffunction foo ())
(deffunction bar () (foo))
(deffunction foo () (bar))
Команда ppdeffunction выводит определение заданной функции на экран.
(ppdeffunction <имя-функции>)
Команда list-deffunctions предназначена для отображения в диалоговом окне списка имен всех определенных в системе
функций.
(list-deffunctions)
Для удаления функций, определенных пользователем с помощью конструкторов deffunction, предназначена команда
undeffunction.
(undeffunction <имя-функции>)
В качестве параметра <имя-функции> возможно использование символа *. В этом случае команда попытается удалить
все определенные пользователем функции. Удаление функции закончится неудачей, если выбранная функция в данный мо-
мент используется или выполняется (например, правилом).
CLIPS поддерживает следующие процедурные функции, реализующие возможности ветвления, организации циклов в
программах и т.п.:
If – оператор ветвления;
While – цикл с предусловием;
loop-for-count – итеративный цикл;
prong – объединение действий в одной логической команде;
prong$ – выполнение набора действий над каждым элементом
поля;
return – прерывание функции, цикла, правила и т.д.;
break – то же, что и return, но без возвращения параметров;
switch – оператор множественного ветвления;
bind – создание и связывание переменных.
Среди логических функций (возвращающих значения true или false) следует выделить такие группы:
функции булевой логики: and, or, not;
функции сравнения чисел: =, , >, , <, ;
предикативные функции для проверки принадлежности проверяемому типу: integerp, floatp, stringp, symbolp, pointerp
(относится ли аргумент к xternal-address), numberp (относится ли аргумент к integer или float), lexemerp (относится ли аргу-