Студопедия

КАТЕГОРИИ:

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

Использование встроенных предикатов.




Для управления процессом вывода информации на экран в Турбо Прологе существуют встроенный предикат write, который производит вывод заданного количества аргументов (константы или переменные) на текущее устройство вывода. На момент вывода переменные не должны быть свободными. Формат write ( A 1, A 2,..., AN ). Согласуется всегда успешно.

Предикат nl обеспечивает переход на новую строку в текущем устройстве вывода (то же, что write("\n")).

Эти предикаты удобно использовать в разделе описания внутренней цели, например:

GOAL

Write (“Родственные отношения :”), nl ,

father ( X , “Анна”), write (“Отцом Анны является”, X ).

 

Для ограничения пространства поиска, с целью повышения эффективности работы программ используется предикат отсечения cut (записывается как “!”). Он всегда завершается успешно. После того, как до него дошла очередь, он устанавливает "забор", который не дает "откатиться назад", чтобы выбрать альтернативные решения для уже "сработавших" подцелей. То есть для тех, которые расположены левее отсечения . На цели , расположенные правее, отсечение не влияет. Кроме того, отсечение отбрасывает все предложения процедуры, расположенные после предложения , в котором находится отсечение . Например, для нахождения максимума из двух чисел можно воспользоваться следующим правилом:

max2(X,Y,X):-

X>Y,!./* если первое число больше второго, то первое число - максимум */

max2(_,Y,Y). /* в противном случае максимумом будет второе число */

 

Задание для лабораторной работы

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

Варианты заданий

  1. Определить предикат сын и найти всех сыновей конкретного лица.
  2. Определить предикат дочь и найти всех дочерей конкретного лица.
  3. Определить предикат внук и найти всех внуков конкретного лица.
  4. Определить предикат дедушка и найти всех дедушек конкретного лица.
  5. Определить предикат бабушка и найти всех бабушек конкретного лица.
  6. Определить предикат тетя и найти всех теть конкретного лица.
  7. Определить предикат дядя и найти всех дядь конкретного лица.
  8. Определить предикат брат и найти всех братьев конкретного лица.
  9. Определить предикат сестра и найти всех сестер конкретного лица.
  10. Определить предикат племянник и найти всех племянников конкретного лица.
  11. Определить предикат потомок и найти всех потомков конкретного лица.
  12. Определить предикат двоюродный брат и найти всех двоюродных братьев конкретного лица.
  13. Определить предикат двоюродная сестра и найти всех двоюродных сестер конкретного лица.
  14. Определить предикат троюродный брат и найти всех троюродных братьев конкретного лица.
  15. Определить предикат троюродная сестра и найти всех троюродных сестер конкретного лица.
  16. Определить предикат внучатый племянник и найти всех внучатых племянников конкретного лица.

 

Контрольные вопросы.

  1. Что такое правило, привести примеры.
  2. Для чего используется дерево вывода, привести примеры.
  3. Что такое рекурсия, привести примеры.
  4. Дать рекурсивную формулировку понятия предок.
  5. Понятие шага и базиса рекурсии.
  6. Использование встроенных предикатов для форматированного вывода информации на экран.
  7. Использование предиката отсечения.
  8. Дать рекурсивную формулировку понятия потомок.
  9. Дать название следующему правилу

Неизвестное_правило(X, Z) :-

родитель( X , Y ),

родитель( Y , Z ),

мужчина( X ).

  1. Написать правило находящее минимум из двух чисел.
  2. Написать правило находящее максимум из трех чисел.
  3. Дать название следующему правилу

Неизвестное_правило(X, К) :-

родитель( Y , X ),

родитель( Y , Z ),

X <> Z ,

родитель( Z ,К),

женщина(К).

 

Лабораторная работа № 3

ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ VISUAL PROLOG

Цель работы:

изучить основные элементы ИСР VISUAL PROLOG и получить практический навык их использования.

 

Создание нового проекта.

Для создания нового проекта VISUAL PROLOG необходимо выполнить команду Project a New , появится окно Project Settings (Настройки проекта).

На закладке General необходимо заполнить следующие поля

• Project Name - название проекта;

• Base Directory - основная папка для хранения проекта.

Затем нажать кнопку [Create]. Активизируется окно проекта, которое содержит окно дерева проекта – для отображения списка файлов проекта и окно сообщений – для вывода сообщений компилятора.

Создание формы.

Для создания формы необходимо выполнить командуFile - New . Появится окно Create Project Item (Создание элементов проекта). На левой панели окна выбрать пункт Form и в поле Name ввести его название (предпочтительно на английском языке). После нажатия на кнопку [ Create ] появится окноForm Properties (Свойства формы), в котором можно установить размеры окна( Size ), текст заголовка ( Title ), атрибуты шрифта( Font ) и т.д. После настройки необходимых параметров и нажатия на [ OK ] появятся окна редактора формы рис 3.1.

рис. 3.1. Окна редактора формы

 

Окно Controls содержит визуальные компоненты доступные для перемещения на форму, Layout - служит для выравнивания размеров и положения компонентов.

Для компиляции программы используется команда Build - Build , клавиша [F9] или соответствующая кнопка на панели инструментов.

Работа с меню

Для активизации пунктов меню в окне дерева проекта дважды щелкнуть по пункту TaskMenu.mnu , откроется окно TaskMenu (Настройки пунктов меню) изображенное на рис 3.2.

Рис.3.2.Окно настроек пунктов меню

 

В нижней части этого окна расположено дерево меню. Для активизации пункта меню необходимо открыть нужную ветвь , щелкнуть по пункту и убрать галочку в пункте Disabled. Затем закрыть окно редактора меню подтвердив изменения с помощью кнопки[Sаve]. Для того чтобы при выборе пункта меню выполнялось определенное правило, надо в окне дерева проектов в контекстном меню пункта TaskWindow.win выбрать команду CodeExpert . Появится окно Dialog and Window Expert.

Пример .Создать обработчик команды File - New, создающий новое окно .

Для этого в окне Dialog and Window Expert выбрать команду Menu/TaskMenu/ id_file/ id_file_new. В нижней части окна нажать кнопку [Add] и дважды щелкнуть по ветке id_file_new ->onFileNew. Откроется редактор текста программы содержащий следующую заготовку:

clauses
onFileNew(_Source, _MenuTag).

Предикат onFileNew будет выполняться в том случае если пользователь выполнит команду File - New Для добавления функциональности к этому предикату воспользуемся конструктором new создающим новое окно, и зададим ему имя Form. Для отображения этого окна используется метод show (). Таким образом, для открытия формы с именем query предикат onFileNew, будет выглядеть следующим образом:

clauses
onFileNew(_Source, _MenuTag):- Form = query::new(_Source), Form: show().










Последнее изменение этой страницы: 2018-05-10; просмотров: 470.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...