Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабПрактикум(1-5)_ПЗ в ИС_2011 .doc
Скачиваний:
27
Добавлен:
19.11.2019
Размер:
1.56 Mб
Скачать

Практикум 2-1

Создайте базу знаний (БЗ), хранящую сведения о студентах (не менее 10) и их средних баллах. Напишите правило, определяющее «хороших» (по среднему баллу) студентов.

Практически у каждого студента есть какое-то хобби (возможно, не одно). Добавьте факты с информацией о хобби в БЗ.

Создайте запросы для ответов на следующие вопросы:

  1. Какие хобби у «хороших» студентов?

  2. Кто-нибудь увлекается фотографией?

  3. Какие средние баллы у студентов, увлекающихся футболом?

Множество правил, заголовки которых содержат одинаковые имена предикатов и одинаковое количество аргументов, называются процедурой. На рис. 2.1 представлены правила, которые реализуют процедуру нахождения наибольшего из двух действительных чисел, определяемую предикатом вида max(number1, number2, max_number). Считается, что между этими правилами неявно присутствует соединительный союз "или".

Рис. 2.1. Нахождение максимального числа

Практикум 2-2

Создайте программу вычисления максимального и минимального из трех целых чисел.

В секции goal задается внутренняя цель программы. Цель может состоять из нескольких предикатов (из нескольких подцелей). Если внутренняя цель не используется, то в процессе работы есть возможность вводить в диалоговом окне внешнюю цель.

Часто целью является сложный запрос к программе. Для разрешения какой-либо сложной цели Пролог должен разрешить все его подцели, создав при этом необходимое множество связанных переменных. Если же одна из подцелей ложна, Пролог возвратится назад и просмотрит альтернативные решения предыдущих подцелей, а затем вновь пойдет вперед, но с другими значениями переменных. Этот процесс называется "поиск с возвратом".

Стандартные предикаты

В систему Пролог включено более 200 встроенных стандартных предикатов и более дюжины стандартных доменов. В случае использования этих предикатов и доменов нет необходимости объявлять их в программе.

Ввод и вывод

С помощью встроенных предикатов ввода-вывода программа, взаимодействуя с пользователем, может принимать от него данные и печатать результаты. Рассмотрим простейшие предикаты ввода\ вывода.

Ввод данных.

readln(X) – для ввода строки

readint(X) – для ввода целых чисел

readchar(X) – для ввода символов

readreal(X) – для ввода действительных чисел

По умолчанию данные вводятся с клавиатуры терминала, ввод завершается нажатием клавиши “Enter”.

Для вывода используется предикат

write(T1,T2,…,Tn).

Он выводит значения T1,T2,…,Tn на текущее устройство вывода, по умолчанию, на экран. Предикат write(…) не допускает повторного согласования и выполняется лишь один раз. Переход на новую строку при печати данных обеспечивается встроенным предикатом nl, название которого образовано аббревиатурой (начальными буквами) слов «newline» новая строка. Как и write, предикат nl выполняется только один раз.

Перечень и назначение стандартных предикатов приведен в Приложении 1.

Рассмотрим пример программы, в которой используется обращение к стандартным предикатам (рис.2.2):

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

В этой программе запрашивается Ваше имя, а затем оно выводится на экран.