Определение 10.3. Список не перегружаемых внутренних функций CLIPS
active-duplicate-instance
active-initialize-instance
active-make-instance
active-message-duplicate-instance
active-message-modify-instance
active-modify-instance
any-instancep
assert
bind
break
call-next-handler
call-next-method
call-specific-method
delayed-do-for-all-instances
do-for-all-instances
do-for-instance
duplicate
duplicate-instance
expand$
find-all-instances
find-instance
if
make-instance
initialize-instance
loop-for-count
message-duplicate-instance
message-modify-instance
modify
modify-instance
next-handlerp
next-methodp
object-pattern-match-delay
override-next-handier
override-next-method
progn
progn$
return
switch
while
Приоритет методов
Когда два или более метода применимы к некоторому вызову родовой функции, CLIPS выполняет метод с наивысшим приоритетом. Приоритет метода определяется в момент его создания. Для того чтобы просмотреть приоритеты существующих методов, можно воспользоваться функцией list-defmethods (см. гл. 15).
Приоритет определяется сравнением ограничений параметров для пар методов. Метод с большим числом заданных ограничений параметров имеет больший приоритет. Кроме того, CLIPS учитывает диапазон значений, задаваемых приоритетом. Например, метод, который требует наличие типа integer, для некоторого аргумента имеет больший приоритет, чем метод, который требует для этого аргумента тип number. Ниже приведены правила, используемые CLIPS для определения приоритета между двумя методами.
1. Последовательно, слева направо сравниваются ограничения параметров обоих методов. Другими словами, первое ограничение параметра первого метода сравнивается с первым ограничением параметра второго метода и т. д. Сравнение между этими парами ограничений параметров двух методов определяет приоритет между двумя методами. Сравнение прекращается, как только будет найдена первая пара ограничений, однозначно определяющая метод с более высоким приоритетом. Для сравнения пар ограничений параметров применяются следующие правила в указанном порядке:
Ø обязательные параметры имеют более высокий приоритет, чем групповой параметр;
Ø более строгие ограничения типа имеют более высокий приоритет. Например, класс имеет больший приоритет, чем его суперкласс;
Ø параметр с ограничением запроса имеет приоритет выше, чем параметр, который его не имеет.
2. Метод с большим числом постоянных параметров имеет больший приоритет.
3. Метод без групповых параметров имеет более высокий приоритет, чем метод с групповыми параметрами.
4. Если метод определен раньше другого, то первый метод имеет более высокий приоритет.
Если в одном ограничении задано несколько классов, определение приоритета усложняется. Поскольку определение приоритетов выполняется в момент создания нового метода, а конкретный класс аргумента станет известен только в момент вызова родовой функции, то для определения приоритета методов со списком классов в ограничении типа необходим специальный алгоритм для определения приоритета между двумя списками классов. В этом случае списки классов рассматриваются парами слева направо. Приоритет определяет первая пара, содержащая класс и его суперкласс. Список классов, содержащий класс, имеет более высокий приоритет, чем список, содержащий суперкласс данного класса. Если таких пар нет, то более приоритетным считается самый короткий список. В случае если приоритет списка классов установить не удалось, то ограничение параметра, использующее этот список классов, не рассматривается при определении приоритета метода.
Рассмотрим процесс определения приоритета методов на нескольких примерах.
Дата добавления: 2021-12-14; просмотров: 298;