Студопедия — Визуальные инструменты для работы с родовыми функциями
Студопедия Главная Случайная страница Обратная связь

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

Визуальные инструменты для работы с родовыми функциями






В заключение данной главы рассмотрим визуальные инструменты, которые предоставляет CLIPS для работы с родовыми функциями (подробное описание функций и команд для работы с родовыми функциями и их методами см. в гл. /5 и 16).

Для работы с родовыми функциями Windows-версия среды CLIPS предос­тавляет инструмент — Defgeneric Manager (Менеджер родовых функций). Для его запуска выберите пункт Defgeneric Manager в меню Browse. Соот­ветствующий пункт в меню недоступен, если в данный момент в среде не определена ни одна родовая функция. Общий вид менеджера представлен на рис. 10.1.

Рис. 10.1. Окно менеджера родовых функций

Общее количество родовых функций отображается в заголовке окна менед­жера — Defgeneric Manager — 2 Items. С помощью этого инструмента вы можете удалить родовую функцию из системы (кнопка Remove),вывести на экран ее определение (кнопка Pprint),установить режим просмотра вызова отдельной функции и вызвать менеджер методов для заданной функции (кнопка Methods).

Учтите, что удаление родовой функции приводит к удалению всех ее ме­тодов.

Для тренировки использования родовых функций и менеджера родовых функций очистите CLIPS и добавьте в него методы, приведенные в приме­ре 10.11.

 

Пример 10.11. Перегрузка функции +

(defmethod + ((?a INTEGER (>?а 0)) (?b INTEGER (>?b 0)))

(call-next-method))

(defmethod + ((?a INTEGER) (?b FLOAT))

(call-next-method))

(defmethod + ((?a FLOAT) (?b FLOAT))

(call-next-method))

(defmethod + ((?a STRING) (?b STRING))

(str-cat?a?b))

Обратите внимание на реализацию методов для сложения чисел. После проверки своих аргументов они просто вызывают системную функцию +. Если бы мы вместо вызова (call-next-method) использовали системную функция + напрямую (+?а?b), то получили бы бесконечную рекурсию, которая привела бы к переполнению стека и аварийному завершению про­граммы.

Попробуйте несколько раз вызвать функцию + с различными аргументами:

 

Пример 10.12. Тестирование родовой функции +

(+ "Hello " "World")

(+ 1 3)

(+ 1 3.5)

(+ 1.5 3)

(+ 1 -3)

(+ 1.5 3.0)

(+ 1.5 3.0 5.0)

(+"Hello " "World" "!!!")

(+ 1 3.5 4)

Полученный результат должен соответствовать приведенному на рис. 10.2.

Обратите внимание, что для вызовов (+ 1.5 3), (+ 1 -3), (+ 1.5 3.0 5.0), (+ 1 3.5 4) применяется вызов системной функции +, т. к. мы не опреде­лили методов, способных принять такие аргументы, но, тем не менее, мы получили корректные ответы. Родовое связывание не смогло подобрать ме­тод, применимый к вызову (+"Hello " "World" "!!!") (наша функция для конкатенации строк принимает строго два аргумента), поэтому мы получи­ли соответствующее сообщение об ошибке.

Установите режим отображения вызова родовой функции с помощью ме­неджера и попробуйте еще раз повторить вызовы, приведенные выше. Об­ратите внимание на сообщения о вызовах родовой функции.

Рис. 10.2. Результаты тестирования родовой функции +

 

Рис. 10.3. Окно менеджера методов родовой функции

Defmethod-Handler Manager (Менеджер методов родовой функции) — еще один инструмент, предоставляемый CLIPS. Внешний вид этого инструмента представлен на рис. 10.3. Этот инструмент выводит на экран список мето­дов родовой функции, указанной менеджером родовых функций. Список методов сортируется по приоритету, установленному для этих методов. Общее количество методов заданной родовой функции отображается в заголовке окна менеджера — Defmethod-Handler Manager — 5 Items (in precedence order).

С помощью менеджера методов вы можете удалить некоторый метод (кнопка Remove), вывести на экран его определение (кнопка Pprint) или устано­вить режим просмотра вызовов отдельного метода. Обратите внимание, что метод, неявно определенный системой, например метод, представляющий системную функцию +, не может быть удален.

Снимите установку вывода сообщений о вызове родовой функции + и установите вывод сообщений о вызове методов с помощью менеджера методов. Выполните следующие вызовы:

Пример 10.13. Тестирование родовой функции +

(+ "Hello " "World")

(+ 1 3)

(+ 1 3.5)

(+ 1 -3)

Результат этих действий представлен на рис. 10.4.

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

Рис. 10.4. Результаты тестирования родовой функции +

В случае если вы хотите установить режим просмотра вызовов всех методов или всех родовых функций, воспользуйтесь диалоговым окном Watch Options из меню Execution. Установите флажки в полях Generic Functions или/и Methods,как показано на рис. 10.5.

Рис. 10.5. Установка режима отображения вызовов родовых функций и методов

В данной главе была описана такая конструкция языка CLIPS, как родовые функции, методы их создания, приемы и способы использования, а также алгоритм родового связывания, делающий возможным функционирование родовых функций. Как вы успели заметить, в качестве ограничения типов для аргументов методов родовых функций используются классы. Внутренние классы CLIPS, а также объектно-ориентированный язык COOL (расширение CLIPS) будут рассмотрены в следующей главе.








Дата добавления: 2015-08-30; просмотров: 844. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Медицинская документация родильного дома Учетные формы родильного дома № 111/у Индивидуальная карта беременной и родильницы № 113/у Обменная карта родильного дома...

Основные разделы работы участкового врача-педиатра Ведущей фигурой в организации внебольничной помощи детям является участковый врач-педиатр детской городской поликлиники...

Ученые, внесшие большой вклад в развитие науки биологии Краткая история развития биологии. Чарльз Дарвин (1809 -1882)- основной труд « О происхождении видов путем естественного отбора или Сохранение благоприятствующих пород в борьбе за жизнь»...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

Почему важны муниципальные выборы? Туристическая фирма оставляет за собой право, в случае причин непреодолимого характера, вносить некоторые изменения в программу тура без уменьшения общего объема и качества услуг, в том числе предоставлять замену отеля на равнозначный...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия