Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример 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 сгене­рирует сообщение об ошибке при попытке их перегрузки.

 


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

mylektsii.su - Мои Лекции - 2015-2026 год. (0.228 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал