- •Содержание
- •Цели и задачи домашней работы
- •2. Требования к выполнению домашней работы
- •3. Требования к оформлению домашней работы.
- •Встроенные предикаты для работы с внутренней базой данных
- •5. Примеры выполнения домашней работы
- •6. Выполнение работы в среде swi prolog
- •7. Задания к домашней работе
- •Библиографический список
6. Выполнение работы в среде swi prolog
Для создания программы в среде SWI PROLOG необходимо создать текстовый файл с расширением PL. Например: MY.PL.
В текстовом файле необходимо создать текст программы на языке PROLOG, сохранить его с расширением PL.
Например, для подсчета суммы двух чисел текст программы в файле с именем BA1.PL будет иметь вид:
sum(X,Y,Z):- Z is X+Y.
Для компиляции файла BA1.PL необходимо его открыть в SWI PROLOG. Для этого используется пункт меню FILE-> Edit.
Пользователь указывает путь к ранее созданному текстовому файлу в появившемся окне, далее используется кнопка «Открыть».
После этого SWI PROLOG открывает окно редактора, в котором можно выполнить компиляцию файла, используя раздел меню COMPILE -> Make. После успешной компиляции внизу окна появится надпись «Make done». Затем следует перейти в окно SWI PROLOG, подгрузить созданный и откомпилированный файл, используя пункт меню FILE-> Consult.
После успешного выполнения данной операции можно приступать к работе с программой, задавая запросы, включающие предикаты, описанные в программе. В конце запроса ставится точка.
В нашем примере, чтобы вычислить сумму двух чисел, следует задать запрос:
?- sum(1,2,Z).
После выполнения получим ответ:
Z=3.
Для проверки правильности предиката, можно задать запросы вида:
?- sum(1,2,3).
После выполнения получим ответ:
true.
?- sum(1,2,5).
После выполнения получим ответ:
false.
При использовании в программе предиката вида:
sum(X,Y,Z):- Z = X+Y.
Задавая запрос:
sum(1,2,Z).
Получим ответ:
Z=1+2.
Для того, чтобы организовать ввод данных пользователем, предикат sum может иметь вид:
sum2(Z):-write('X='),read(X),write('Y='),read(Y),nl,Z is X+Y.
Задавая запрос:
sum(Z).
Получим приглашение для ввода данных:
X=<3.>
Y=<4.>
Получим ответ:
Z=7.
7. Задания к домашней работе
1 |
Имеется список из нескольких дисциплин, изучаемых студентами за время обучения. Для каждой дисциплины известен семестр, во время которого она изучается. Необходимо для произвольно заданной пользователем дисциплины определить, согласно его выбору: какие дисциплины изучаются ранее заданной, позже заданной, одновременно с заданной. При отсутствии запрашиваемой дисциплины в списке вывести ответ «Дисциплина не изучается». |
2 |
Имеются данные о книгах библиотеки в виде: автор книги, название книги, тематика. Кроме того, имеются данные о читателях в виде: фамилия читателя, название взятой им книги. Программа должна осуществлять следующие действия: Запросить у пользователя (читателя) фамилию и если у него уже имеются книги на руках, отказать в выдаче книг. В противном случае – выдать ему имеющийся набор книг либо запрашиваемого автора, либо по запрашиваемой тематике. Нельзя предлагать книги, находящиеся на руках. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
3 |
Некто желает обзавестись домашним животным. Имеются данные о суточном рационе, необходимом разного рода животным, и соответственно о ценах за единицу продукта. Необходимо, исходя из месячного заработка пользователя и той минимальной суммы, которая требуется на жизнь ему самому, определить, каким животным он мог бы обзавестись, или сообщить о том, что на содержание питомца недостаточно средств. |
4 |
Служба знакомств имеет набор сведений о желающих завести знакомство в виде: фамилия, имя, пол, возраст, внешность, жилплощадь, зарплата, дети. Кроме того, для этих же клиентов отдельно хранятся их пожелания относительно будущего партнера. Необходимо клиенту подобрать кандидатуры для знакомства или сообщить об отсутствии подходящих кандидатур. |
5 |
Имеется информация о зарплате и семейном положении мужчин в виде: ФИО, зарплата, женат ли на настоящий момент и если да, то на ком. Кроме того, имеется информация о существовавших когда-либо парах (возможно, уже распавшихся) и их детях в виде: отец, мать, количество детей. Необходимо по запросу пользователя рассчитать сумму алиментов, приходящуюся заданной женщине, сумму алиментов, которую должен выплачивать заданный мужчина, составить список алиментоплательщиков. При отсутствии запрашиваемых сведений предусмотреть соответствующие ответы. |
6 |
Имеется описание авиарейсов, в котором отмечаются пункты отправления и назначения, дата, время вылета и прибытия. Необходимо выбрать авиарейсы, подходящие для того, чтобы прибыть из одного пункта в заданный пункт к определенному времени, но не ранее, чем за N часов до назначенного времени. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
7 |
Имеется описание движения автобусов, в котором содержатся пункты отправления и пункты назначения. Необходимо определить для двух произвольно взятых пунктов, существует ли возможность добраться из первого пункта во второй на автобусе, или если прямого сообщения нет – на двух автобусах. Предусмотреть вариант, когда автобусного сообщения нет. |
8 |
Имеется ряд фирм, продающих компьютеры по различной цене без стоимости доставки. Известна стоимость доставки, устанавливаемая каждой фирмой отдельно в расчете за один километр пути и известно расстояние до каждой из фирм в километрах. Кроме того, имеется список названий ненадежных фирм, с которыми мы не хотим иметь дела. Необходимо определить подходящие фирмы, исходя из имеющегося у нас количества денег для покупки. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
9 |
В деканате хранится информация о составе студенческих групп потока и о результатах сдачи экзаменов студентами различных групп в виде: поток(группа1,…,группа5); группа_i(студент); оценки(студент, оценка1,..., оценка5). Необходимо написать программу, позволяющую пользователю получить информацию: а) список студентов заданной группы; б) список отчисленных за неуспеваемость студентов потока; в) список отчисленных за неуспеваемость студентов заданной группы. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
10 |
В деканате хранится информация о составе студенческих групп потока и о результатах сдачи экзаменов студентами различных групп в виде: поток(группа1,…,группа5); группа_i(студент); оценки(студент, оценка1,..., оценка5). Необходимо написать программу, позволяющую пользователю получить информацию: а) список студентов потока, получающих стипендию; б) список студентов заданной группы, получающих стипендию; в) определить, к какой группе принадлежит заданный студент. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
11 |
Информационная база ресторана содержит список блюд, которые могут быть в нем приготовлены, в виде: блюдо(название_блюда). Для каждого блюда известен список ингредиентов, необходимый для его приготовления: ингредиенты(название блюда, ингридиент1,…, ингридиент5). Кроме того, известны продукты, имеющиеся в наличии на сегодняшний день в виде: имеется(ингредиент). Необходимо составить программу, позволяющую: а) составить список блюд, которые можно приготовить сегодня, б) составить список продуктов, которые необходимо приобрести. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
12 |
Информационная база ресторана содержит список блюд, которые могут быть в нем приготовлены, в виде: блюдо(название_блюда). Для каждого блюда известен список ингредиентов, необходимый для его приготовления: ингредиенты(название блюда, ингредиент1,…, ингредиент5). Кроме того, известны продукты, имеющиеся в наличии на сегодняшний день в виде: имеется(ингредиент). Необходимо составить программу, позволяющую составить вегетарианское меню, исходя из имеющихся продуктов. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
13 |
Башня из кубиков может быть описана совокупностью фактов вида: НА(Кубик1, Кубик2), которые истинны, если Кубик1 поставлен на Кубик2. Определить предикат ВЫШЕ(Кубик1, Кубик2), который истинен, если Кубик1 расположен в башне выше, чем Кубик2 и составить программу, позволяющую определить: список кубиков, расположенных выше заданного пользователем кубика; список кубиков, расположенных ниже заданного пользователем кубика; расположенных на том же уровне, что и кубик, заданный пользователем. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
14 |
Покупателю необходимо приобрести три вида товара. Он может сделать это как в одном магазине (если они там есть), так и в нескольких. Для каждого магазина известны имеющиеся в нем товары (не более трех) и их стоимость в данном магазине: магазин(название, товар1, стоимость 1, товар2, стоимость2, товар3, стоимость3). Дорога от дома до магазина или от магазина до магазина обходится покупателю в определённую сумму (стоимость проезда). Необходимо выбрать возможные маршруты движения покупателя, если известно, что ему надо уложиться в определенную сумму денег. Товары, которые необходимо приобрести и сумма денег покупателя определяются пользователем. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
15 |
Имеются данные о фирмах, осуществляющих прием персонала на работу в виде: фирма(название_фирмы, вид_работы, зарплата_min, зарплата_max, требование1, требование2, требование3, место_работы, набор_требований_ к_физ_данным), где требованиеi – умение, которым должен обладать кандидат на работу. Кроме того, известны адреса фирм: адрес(название_фирмы, адрес_фирмы). Требуется: а) предложить предикаты, позволяющие определить сомнительные виды работ; б) предложить набор фирм для устройства на работу, исходя из желаемой зарплаты и удовлетворения требованиям, включая все фирмы; в) предложить набор фирм для устройства на работу согласно желаемой зарплате и возможностям, исключая сомнительные виды работ. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
16 |
Имеется список владельцев квартир, включающий ФИО владельца и место расположения квартиры – город и адрес. Найти людей, имеющих более одной квартиры в пределах одного города, и выдать их ФИО и адреса. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
17 |
Имеется база данных по лекарственным препаратам, включающая информацию: название лекарства, две болезни, при которых оно показано, стоимость. Написать программу, позволяющую предложить подходящий набор лекарств больному, исходя из его диагноза, аллергии на лекарства (не более одного) и покупательной способности. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
18 |
В налоговой инспекции имеются данные с предприятий округа о доходах работников в форме: название предприятия, фамилия работающего, оклад. Необходимо осуществить выбор людей, работающих более, чем на одном предприятии и получающих хотя бы на одном из этих предприятий оклад более заданного. При отсутствии запрашиваемых сведений предусмотреть соответствующий ответ. |
