Определение 10.2. Синтаксис конструктора defmethod


(defmethod <имя-функции>

[<индекс>]

[<комментарии>]

(<ограничения-параметра>*

[<групповой-параметр>])

<действие>*)

<ограничения-параметров> ::= <простая-переменная> |

(<простая-переменная>

<ограничение-по-типу> *

[<ограничение-по-запросу>])

<групповой-параметр> ::= <составная-переменная> |

(<составная-переменная>

<ограничение-по-типу>*

[<ограничение-по-запросу >])

<ограничение-по-типу> ::= <имя-класса>

<ограничение-по-запросу> ::= <глобальная-переменная> |

<вызов-функции>

Родовая функция должна быть либо явно объявлена конструктором defgeneric, либо одним из своих методов, до того как она будет вызвана из другой функции, правила или обработчика сообщения. Исключение состав­ляют рекурсивные родовые функции.

Заголовок родовой функции

Родовая функция однозначно определяется по своему имени. В случае ис­пользования родовой функции в правиле, другой функции, обработчике со­общения или до объявления первого метода родовой функции необходи­мо явное создание заголовка родовой функции (с помощью конструктора defgeneric). В других случаях объявление первого метода родовой функции само не явно создает заголовок. Например, в случае если две родовые функции имеют методы, которые взаимно вызывают друг друга (взаимная рекурсия родовых функций), то необходимо явное объявление заголовков.

Индексы методов

Метод родовой функции однозначно определяется либо по имени и индек­су, либо по имени и ограничениям параметров. Каждому методу родовой функции назначается целый индекс, уникальный в группе всех методов этой функции. В случае если определен новый метод, который точно совпа­дает по ограничениям параметров и имени с другим методом этой функции, CLIPS автоматически заменит им существующий метод. Однако малейшее несовпадение в ограничениях параметров приведет к созданию нового ме­тода. Если нужно заменить некоторый уже существующий метод новым ме­тодом с другими ограничениями параметров, то в определении нового мето­да необходимо явно указать индекс существующего метода. При этом огра­ничения параметров нового метода должны не совпадать с ограничениями других методов той же функции. Если индекс не задан, CLIPS автомати­чески назначает индекс, который еще не был использован другими мето­дами родовой функции. Индекс, соответствующий методам родовой функ­ции, можно определить, например, с помощью команды list-defmethods (см. гл. 16).

 



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


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

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

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

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