Студопедия Главная Случайная страница Обратная связь

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

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





В заключение данной главы рассмотрим визуальные инструменты, которые предоставляет 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; просмотров: 893. Нарушение авторских прав; Мы поможем в написании вашей работы!




Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


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


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


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

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Характерные черты официально-делового стиля Наиболее характерными чертами официально-делового стиля являются: • лаконичность...

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

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

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