Пример 10.5. Ограничение запросом для группового поля


(defmethod foo

(($?any (> (length$ ?any) 2)))

TRUE)

(foo 1 red 3)

Кроме того, если у метода нет обязательных параметров (как в предыдущем примере) и функция вызвана без аргументов, заданные ограничения груп­пового параметра не рассматриваются. Например, метод из примера 10.5 можно применить к следующему вызову родовой функции (метод успешно вызовется и вернет значение true): (foo).

Как правило, ограничения запросом применяют ко всему групповому пара­метру для проверки мощности (числа аргументов, переданных методу). В таких случаях первое поле группового аргумента выносится в обязатель­ный параметр (если это возможно). Приведенный выше пример можно усо­вершенствовать.

Пример 10.6. Улучшенная версия функции foo

(defmethod foo

((?arg (> (length$ ?any) 1)) $?any)

TRUE)

Теперь попытка вызова функции (foo) без параметров закончится ошибкой.

Родовое связывание

В момент вызова родовой функции CLIPS выбирает метод с наивысшим приоритетом, для которого удовлетворяются все ограничения параметров. Этот метод выполняется, и его значение возвращается как значение родо­вой функции. Такой процесс называется родовым связыванием.

Применимость методов

Явный (определенный пользователем) метод применим к вызову родовой функции при следующих трех условиях:

Ø имя совпадает с именем родовой функции;

Ø метод принимает не меньше аргументов, чем родовая функция;

Ø каждый аргумент родовой функции удовлетворяет соответствующим огра­ничениям параметров метода.

Ограничения метода рассматриваются слева направо. Как только будет най­дено одно ограничение, не удовлетворяющее некоторому параметру, метод забраковывается, и оставшиеся ограничения не рассматриваются.

При перегрузке стандартной системной функции CLIPS создает неявный метод с определением соответствующей системной функции. Этот неявный метод получает ограничения аргументов благодаря вызову внутренней сис­темной функции DefineFunction2 (более детальную информацию о дан­ной функции можно найти в книге "CLIPS Reference Manual, Volume II, Advanced Programming Guide'}. Строка с соответствующими ограничениями также может быть получена с помощью функции get-function-restriction. Определение неявного метода можно просмотреть функциями list-defmethods или get-method-restrictions.

Перечисленные ниже системные функции нельзя перегрузить. CLIPS сгене­рирует сообщение об ошибке при попытке их перегрузки.

 



Дата добавления: 2021-12-14; просмотров: 344;


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

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

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

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