Определение 15.61. Функция switch
(switch <выражение>) <условие-ветвления>* [<условие>]) <условие-ветвления>::= (case <выражение> then <действие>*) <действия-по-умолчанию>::= (default действие>*) Для эффективного применения функции switch необходимо наличие, по крайней мере, трех альтернативных групп действий, зависящих от заданного условного выражения. Функция switch в первую очередь проводит вычисление аргумента <выражение>, а затем сравнивает его со всеми условиями ветвления по очереди. Если значение заданного выражения совпадает с одним из условий ветвления, выполняются соответствующие действия, и работа функции завершается. Если совпадений обнаружить не удалось, функция возвращает результат последнего сеанса выбора (если таковой имеется) или значение false. Ниже приведен пример использования функции switch (см. также рис. 15.21). Пример 15.24. Использование функции switch (defglobal?*x* = 0) (defglobal?*y* = 1) (def function foo (?val) (switch?val (case?*x* then *x*) (case?*y* then *y*) (default none))) (foo 0) (foo 1) (foo 2) Рис. 15.21. Использование функции switch
Работа с родовыми функциями Список функций, предоставляемых CLIPS для работы с методами родовых функций, а также краткое описание их назначения приведен в табл. 15.13. Таблица 15.13. Работа с родовыми функциями
Функция get-defgeneric-list возвращает составную величину, содержащую имена всех определенных в системе родовых функций, видимых в заданном модуле. Если параметр <имя-модуля> не задан, функция выведет список родовых функций, определенных в текущем модуле. Вместо имени модуля допустимо использовать символ *. В этом случае возвращается список всех родовых функций. Определение 15.62. Функция get-defgeneric-list
(get-defgeneric-list [<имя-модуля>])
Функция defgeneric-module служит для определения модуля, в котором указана заданная родовая функция.
Определение 15.63. Функция defgeneric-module
(defgeneric-module <имя-родовой-функции>) Для определения списка методов и индексов, определенных в системе родовых функций, видимых в заданном модуле, служит функция get-defmethod-list. Если необязательный параметр <имя-родовой-функции> не указан, будет получен список методов всех родовых функций.
|