Определение 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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.