removewindow. say_more_work:-
makewindow(3,7,7, “Продолжим!”, 14, 6, 7, 28), nl, write(“Вам нужно поработать ещё”), nl, nl,
beep, beep, beep,
write(“Нажмите на любую клавишу”), readchar(_),
removewindow.
Правило make_exercise_set задает три контрольных вопроса. Для каждого вопроса правилом gen_rand_num генерируется два случайных целых числа в диапазоне от 1 до 5, эти числа выводятся на экран, затем предлагается ввести ответ, предикат test_and_reward оценивает ответ пользователя.
Задание. Усовершенствуйте программу. Предложите пользователю выбрать 1 из 4 тренажеров и проверить его знания арифметических операций, оценив его способности по 5-бальной шкале.
16
Часть 2. Лабораторные работы Лабораторная работа №1. Общие сведения об языке логического
программирования Пример 1. Наша первая Пролог программа будет содержать информацию
о военнослужащих некоторого воинского подразделения и их званиях: “Павлов генерал”, “Сабо полковник”, “Денисов капитан”, “Матвеев капитан”, “Кулёмин сержант”, “Николаев сержант”. Сформулировать на Прологе следующие вопросы: 1) Павлов генерал? 2) Кто является полковником? 3)Кем является Денисов? 4)В подразделение есть военный в звание сержанта? 5) В подразделение есть военный в звание подполковника?
6)Вывести военных, имеющих одинаковые звания.
Впрограмме каждого военного мы представим предикатом military размерности 2, каждый компонентатом, первый представляет фамилию, а второй – его звание.
Domains
s=symbol
Программа 3. База данных «Военная часть»
Predicates
military(s,s)
Clauses
military(pavlov, general). military(sabo, polkovnik). military(denisov, kapitan). military(matveev, kapitan). military(kulemin, serzhant). military(nikolaev, serzhant).
Сформулируем запросы:
1) ? military(pavlov, general)
Ответ: yes
2) ? military(X, polkovnik)
Ответ: X= sabo
3) ? military(denisov, X)
Ответ: X= kapitan
4) ? military(_, serzhant)
Ответ: yes
5)? military(_, podpolkovnik)
Ответ: no
17
6) ? military(X,Y), military(Z, Y), X<>Z
Ответ: X= denisov Z= matveev Y= kapitan X= kulemin Z= nikolaev Y= serzhant
Пример 2. Данные о крупных реках России сведены в таблицу:
Таблица 5.
Данные о крупных реках России
Название |
|
Годовой |
Площадь |
|
Куда |
|
Длина, км |
бассейна, |
Истоки |
||||
реки |
сток, км3 |
впадает |
||||
|
тыс. км2 |
|
||||
|
|
|
|
|
||
Амур |
4416 |
350 |
1855 |
Яблоневый хребет |
Татарский |
|
пролив |
||||||
|
|
|
|
|
||
Лена |
4400 |
488 |
2490 |
Байкальский |
Море |
|
хребет |
Лаптевых |
|||||
|
|
|
|
|||
Обь |
4070 |
400 |
2990 |
Предгорья Алтая |
Карское |
|
море |
||||||
|
|
|
|
|
||
Иртыш |
4248 |
323 |
1643 |
Китай |
Обь |
|
Енисей |
3487 |
600 |
2580 |
Восточный Саян |
Карское |
|
море |
||||||
|
|
|
|
|
||
Волга |
3530 |
255 |
1360 |
Валдайская |
Каспийское |
|
возвышенность |
море |
|||||
|
|
|
|
|||
|
|
|
|
|
Восточноси |
|
Колыма |
2129 |
44 |
643 |
Хребет Черского |
бирское |
|
|
|
|
|
|
море |
|
Урал |
2428 |
54 |
231 |
Южный Урал |
Каспийское |
|
море |
||||||
|
|
|
|
|
||
Дон |
2200 |
45 |
504 |
Среднерусская |
Азовское |
|
возвышенность |
море |
|||||
|
|
|
|
|||
Кама |
1805 |
130 |
507 |
Верхне — Камская |
Волга |
|
возвышенность |
||||||
|
|
|
|
|
||
Печора |
1809 |
130 |
322 |
Северный Урал |
Баренцево |
|
море |
||||||
|
|
|
|
|
||
Ангара |
1779 |
62 |
1039 |
Байкал |
Енисей |
|
Селенга |
1024 |
14 |
447 |
Монголия |
Байкал |
|
Кубань |
870 |
11 |
58 |
Кавказ |
Азовское |
|
море |
||||||
|
|
|
|
|
Составить базу данных и ответить на следующие вопросы:
1)Определить реки, впадающие в Азовское море.
2)Определить реки, исток которых находится на Валдайской возвышенности?
3)Какие реки короче Камы?
4)Какие реки длиннее Иртыша?
18
5) Как задать вопрос, определяющий все данные о реке Кама?
Программа 4. База данных «Реки России»
Domains
S=symbol
N=integer
Predicates
reka(S,N,N,N,S,S)
Clauses
reka(amur, 4416, 350, 1855,yablonevi_hrebet,tatar_proliv). reka(lena, 4400, 488, 2490, baikal_hrebet, more_laptevih). reka(ob, 4070, 400, 2990, altai, more_karskoe). reka(irtish, 4248, 323, 1643, kitai, ob).
reka(enisei, 3487, 600, 2580, vost_cain, more_karskoe). reka(volga, 3530, 255, 1360, valdais_vozvishennost, more_kaspi). reka(kolima, 2129, 44, 643, hrebet_cherskogo, vost_sibir_more). reka(ural, 2428, 54, 231, yuzhni_ural, more_kaspi).
reka(don, 2200, 45, 504, sredn_rus_vozvvishennost, more_azov). reka(kama, 1805, 130, 507, verhne_kamsk_ vozvvishennost, volga). reka(pechora, 1809, 130, 322, sever_ural, barenzevo_more). reka(angara, 1779, 62, 1039, baikal, enisei).
reka(selenga, 1024, 14, 447, mongolia, baikal). reka(kuban, 870, 11, 58, kavkaz, more_azov).
Запросы:
reka(X, _, _, _, _, more_azov)
reka(X, _, _, _, valdais_vozvishennost,_)
reka(X, Y, _, _, _, _), reka(lena, Z, _, _, _, _), Y<Z reka(X, Y, _, _, _, _), reka(irtish, Z, _, _, _, _), Y>Z reka(kama, A,B,C,D,E)
Пример 3. Известно, что Лене нравится теннис, Денису нравится футбол, Борису – бейсбол, Эдику – плавание, Марку нравится теннис, а Фёдору то, что нравится Борису. Записать факты на Прологе и ответить на вопросы: 1)Кому нравится теннис? 2) Что нравится Федору? 3)Кто занимается одинаковыми видами спорта?
Predicates
likes(symbol,symbol)
Программа 5. База знаний «Предпочтения»
Clauses
likes(lenа, tennis). likes(denis, football). likes(boris, baseball). likes(edic, swimming). likes(mark, tennis).
likes(fedor, Activity):- likes(boris, Activity). /* Activity играет роль переменной*/
Запросы
1) ? likes(X, tennis)
19
Ответ: X= lenа X= mark
2) ? likes(fedor, X)
Ответ:
X= baseball
3) ? likes(X, T), likes(Y, T)
Ответ:
X= lenа Y= mark T= tennis X= mark Y= lenа T= tennis X= boris Y= fedor T= baseball X= fedor Y= boris T= baseball
Пример 4. Лена, Анна, Денис и Борис-люди, лада и нисан - автомобили, Лене нравится лада, Анне - пицца, Денису - футбол, а Борис - Мерседес, Ваське - рыбка. Пицца, лада, мерседес продаются. Человек может купить машину, если она продается, и она ему нравится. Сформулировать на прологе вопросы: 1)Какую машину может купить Лена? 2) Кто-нибудь может купить мерседес? 3) какие машины продаются, и ответить на них.
Программа 6. База знаний «Предпочтения и возможности»
Domains
s=symbol
Predicates human(s) car(s) likes(s,s) can_by(s,s) cells(s)
Clauses
human( lena ). human( anna ). human( denis ). human( boris ). car( lada ). car( nissan ).
likes( lena, lada ). likes( anna, pizza ). likes( denis, football ). likes( boris, mersedes ). likes( vasya, ribka ). cells(pizza).
cells(lada).
20