Помощь в написании студенческих работ
Антистрессовый сервис

Лабораторные работы. 
Логическое программирование

РефератПомощь в написанииУзнать стоимостьмоей работы

Лабораторная работа № 1. Общие сведения о языке логического программирования Пример 1. Наша первая Пролог программа будет содержать информацию о военнослужащих некоторого воинского подразделения и их званиях: «Павлов генерал», «Сабо полковник», «Денисов капитан», «Матвеев капитан», «Кулёмин сержант», «Николаев сержант». Сформулировать на Прологе следующие вопросы: 1) Павлов генерал? 2) Кто… Читать ещё >

Лабораторные работы. Логическое программирование (реферат, курсовая, диплом, контрольная)

Лабораторная работа № 1. Общие сведения о языке логического программирования Пример 1. Наша первая Пролог программа будет содержать информацию о военнослужащих некоторого воинского подразделения и их званиях: «Павлов генерал», «Сабо полковник», «Денисов капитан», «Матвеев капитан», «Кулёмин сержант», «Николаев сержант». Сформулировать на Прологе следующие вопросы: 1) Павлов генерал? 2) Кто является полковником? 3) Кем является Денисов? 4) В подразделение есть военный в звание сержанта? 5) В подразделение есть военный в звание подполковника? 6) Вывести военных, имеющих одинаковые звания.

В программе каждого военного мы представим предикатом military размерности 2, каждый компонентатом, первый представляет фамилию, а второй — его звание.

Программа 3. База данных «Военная часть».

Domains.

s=symbol.

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.

6)? military (X, Y), military (Z, Y), XZ.

Ответ: X= denisov Z= matveev Y= kapitan.

X= kulemin Z= nikolaev Y= serzhant.

Пример 2. Данные о крупных реках России сведены в таблицу:

Таблица 5 — Данные о крупных реках России.

Название реки.

Длина, км.

Годовой сток, км3.

Площадь бассейна, тыс. км2.

Истоки.

Куда впадает.

Амур

Яблоневый хребет.

Татарский пролив.

Лена.

Байкальский хребет.

Море Лаптевых.

Обь.

Предгорья Алтая.

Карское море.

Иртыш.

Китай.

Обь.

Енисей.

Восточный Саян.

Карское море.

Волга.

Валдайская возвышенность.

Каспийское море.

Колыма.

Хребет Черского.

Восточносибирское море.

Урал.

Южный Урал.

Каспийское море.

Дон.

Среднерусская возвышенность.

Азовское море.

Кама.

Верхне — Камская возвышенность.

Волга.

Печора.

Северный Урал.

Баренцево море.

Ангара.

Байкал.

Енисей.

Селенга.

Монголия.

Байкал.

Кубань.

Кавказ.

Азовское море.

Составить базу данных и ответить на следующие вопросы:

  • 1) Определить реки, впадающие в Азовское море.
  • 2) Определить реки, исток которых находится на Валдайской возвышенности?
  • 3) Какие реки короче Камы?
  • 4) Какие реки длиннее Иртыша?
  • 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.

reka (X, Y, _, _, _, _), reka (irtish, Z, _, _, _, _), Y>Z.

reka (kama, A, B, C, D, E).

Пример 3. Известно, что Лене нравится теннис, Денису нравится футбол, Борису — бейсбол, Эдику — плавание, Марку нравится теннис, а Фёдору то, что нравится Борису. Записать факты на Прологе и ответить на вопросы: 1) Кому нравится теннис? 2) Что нравится Федору? 3) Кто занимается одинаковыми видами спорта?

Программа 5. База знаний «Предпочтения».

Predicates.

likes (symbol, symbol).

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).

Ответ:

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).

cells (mersedes).

can_by (X, Y):-human (X), car (Y), likes (X, Y), cells (Y).

Запросы:

1) can_by (lena, X).

X=lada.

2) can_by (_, mersedes).

no.

3) car (X), cells (X).

X=lada.

Пример 5. Программа иллюстрирует различные способы ввода данных.

Программа 7. Ввод данных.

Predicates.

vvod_int.

vvod_ch.

vvod_s.

Clauses.

vvod_int: — readint (N1), readint (N2), N=N1+N2, write (N).

vvod_ch: — readchar (N1), readchar (N2), N=N1+N2, write (N).

vvod_s: — readln (N1), readln (N2), concat (N1,N2,N), write (N).

Пример 6. Вывести в каждой строке сообщения: Леонард отец Катерины, Карл отец Джейсона, Карл отец Марины.

Программа 8. База знаний «Семья».

Domains.

name = symbol.

Predicates.

father (name, name).

everybody.

clauses.

father (leonard, katherine).

father (carl, jason).

father (carl, marinа).

everybody :;

father (X, Y),.

write (X, «is «, Y, «s father «),.

fail.

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

Проверьте работу программы с и без использования предиката fail.

Отрицание задается с помощью предиката not.

Пример 7. У нас есть информация о странах-партнерах Европы, имеющих общую границу. Предположим, нас интересуют какие страны-партнеры не имеют общей границы.

Программа 9. База знаний «Страны Европы».

Domains.

country=symbol.

Predicates.

euro_pair (country, country).

border (country, country).

find_non_border_pair.

Clauses.

euro_pair («France», «Germany»).

euro_pair («France», «Spain»).

euro_pair («France», «Italy»).

euro_pair («Germany», «Spain»).

euro_pair («Germany», «Italy»).

euro_pair («Spain», «Italy»).

border («France», «Germany»).

border («France», «Spain»).

border («France», «Italy»).

find_non_border_pair:;

euro_pair (X, Y),.

not (border (X, Y)),.

write (X," - «, Y), fail, nl.

Goal.

find_non_border_pair.

Результатом запроса будет ответ.

Germany — Spain. Germany — Italy. Spain — Italy.

Пример 8. Использование составных объектов Программа 10. База данных «Коллекция"(Вариант 1).

Domains.

personal_library=book (title, author, publisher, year).

collector, title, author, publisher=symbol.

year=integer.

Predicates.

collection (collector, personal_library).

Clauses.

collection (ivanov, book («Zolushka», «Denis Tarakanov», «Dinamo», 2003)).

collection (petrov, book («Maslenniza», «Anna Zimina», «Zenit», 2005)).

collection (petrov, book («Repka»,"Irina Larina", «Mir», 1999)).

/*Демонстрация двухуровневого составного объекта*/.

Программа 11. База данных «Коллекция"(Вариант 2).

Domains.

personal_library=book (title, author, publiсation).

publiсation= publiсation (publisher, year).

collector, title, author, publisher =symbol.

year=integer.

Predicates.

collection (collector, personal_library).

Clauses.

collection (ivanov, book («Zolushka»,"Den Taran", publiсation («Dina», 2003))).

collection (petrov, book («Maslenniza»,"Anna Zima", publiсation («Zenit», 2005))).

collection (petrov, book («Repka»,"Irina Larina", publiсation («Mir», 1999))).

/*Демонстрация использования конструкций альтернативных доменов*/.

Программа 12. База знаний «Клуб по интересам».

Domains.

thing=misc_ thing (whatever);

book (author, title);

record (artist, album, type).

person, whatever, title, author, artist, album, type =symbol.

Predicates.

owns (person, thing).

show_misc_things.

show_books.

show_records.

Clauses.

owns («Ivanov», misc_things («sports car»)).

owns («Petrov», misc_things («motor cycle»)).

owns («Smirnov», misc_things («piano»)).

owns («Ivanov», book («James A. Mishener»,"Space")).

owns («Petrov», book («Frank Herbert», «Dune»)).

owns («Sidorov», book («J.R.R. Tolkein»,"Return of the Ring")).

owns («Ivanov», record («Elton John», «Ice Fair», «popular»)).

owns («Petrov», record («Michael Jackson», «We are the World», «popular»)).

owns («Sidorov», record («Madonna»,"Madonna", «popular»)).

show_misc_things: — owns (X, misc_things (Y)), write (X, ««, Y), nl, fail.

show_books: — owns (X, book (_, Y)), write (X, ««, Y), nl, fail.

show_records: — owns (X, record (_, Y,_)), write (X, ««, Y), nl, fail.

Задания для самостоятельной работы Дана база данных «Родители и дети»:

родитель (полина, борис), родитель (анатолий, борис), родитель (анатолий, лиза), родитель (борис, катя), родитель (борис, валентина), родитель (полина, евгений).

Сформулировать вопросы на Прологе: Кто является родителем Кати? Есть ли у Лизы ребенок? Кто дети Бориса? Кто чей родитель?

Дана база данных «Теремок»:

живет (муха, горюха), живет (комар, пискун), живет (мышка, погрызуха), живет (лягушка, квакушка), живет (заюнок, кривоног),.

живет (лиса, краса), живет (волк, хватыш), не_живет (медведь, пригнетыш).

Указать ответы на следующие вопросы:

  • ?-живет (мышка, погрызуха).? -живет (волк, X).
  • ?-живет (Х, кривоног). ?-не_живет (М, P).

Сформулировать вопросы на Прологе: Живет ли лягушка в теремке? Какое прозвище у лисы? Кто имеет прозвище горюха? Какой следует задать вопрос, чтобы узнать обитателей теремка (без прозвищ)?

База данных «Рождение и хобби друзей»:

рождение (иванова, лена, 22, июнь, 1971), рождение (петров, сергей, 25, октябрь, 1973), рождение (сидорова, оля, 1, декабрь, 1974), любит (иванова, лена, книги), любит (иванова, лена, танцы), любит (петров, сергей, видео), любит (сидорова, оля, кино).

Сформулировать вопросы на Прологе: Кто родился в 1971 году? Кто родился в октябре? Кто любит книги? Кто любит и книги и танцы?

База данных «Колобок»: ушел (колобок, дедушка), ушел (колобок, бабушка), ушел (колобок, заяц), ушел (колобок, волк), ушел (колобок, медведь), не_ушел (колобок, лиса).

Сформулировать вопросы на Прологе: Кто ушел от волка? Кто не ушел от лисы? Кто ушел от волка и от бабушки? Какой следует задать вопрос, чтобы узнать всех персонажей сказки?

База данных «Распорядок дня»:

занятие (0, 7, сон), занятие (7, 8, завтрак), занятие (8, 13, школа), занятие (13, 14, обед), занятие (14, 19, свобода), занятие (19, 20, ужин), занятие (20, 23, отдых), занятие (23, 24, сон).Сформулировать вопросы на Прологе: Когда бывает обед? Что бывает между 14 и 19 часами? Когда бывает сон? (сколько будет решений?).

Построить базу данных «Важнейшие события Древнего Мира» на основе установленных фактов, произошедших с 31 по 6 век до нашей эры.

Каждый факт приводить в виде событие (Х, Y, Z), где X — название государства, где произошло событие, Y — в каком веке произошло событие, Z — какое произошло событие.

В 31-м веке до нашей эры возникли первые города-государства. Единое государство в Египте образовалось в 30 веке до нашей эры. В 27 веке до нашей эры в Индии появились первые древнейшие города, а в Египте построена пирамида Хеопса. Первые греческие государства появились в 18 веке до нашей эры. В этом же веке в Египте произошло крупное восстание бедняков и рабов. В 15 веке до нашей эры появились первые государства в Китае. Тутмос III правил в Египте в 15 веке до нашей эры. Греция вела троянскую войну в 13 веке до нашей эры. Вторжение борийских племен в Грецию произошло в 11 веке до нашей эры. В 8 веке до нашей эры был основан город Рим. Олимпийские игры стали проводиться в Греции в 8 веке до нашей эры. В 6 веке до нашей эры в Риме была установлена республика, а в Греции произошли реформы Солона. В этом же веке персы взяли Вавилон в Междуречье и завоевали Египет.

Составить 3 запроса к этой базе данных.

Какие события произошли в период с 15 до 7 в. до н.э.

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

Таблица 6 — Характеристики движения планет солнечной системы.

Планета.

Расстояние до Солнца (у.е.).

Период обращения.

Средние солнечные сутки.

Меркурий.

88 суток.

176 суток.

Венера.

225 суток.

117 суток.

Земля.

365 суток.

24 часа.

Марс.

687 суток.

25 часов.

Юпитер

12 лет.

10 часов.

Сатурн.

29 лет.

10 часов.

Уран.

84 года.

24 часа.

Нептун.

165 лет.

22 часа.

Плутон.

247 лет.

6 суток.

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

Ответить на вопросы: Какие планеты ближе к Солнцу, чем Земля? Какие планеты дальше от Солнца, чем Земля? На каких планетах солнечные сутки меньше, чем земные? На каких планетах период обращения измеряется в годах?

Построить базу знаний «Рабочая смена»:

Мария работает в дневную смену. Сергей работает в вечернюю смену. Борис работает в вечернюю смену. Валентина работает в вечернюю смену. Два служащих знают друг друга, если они работают в одну смену. Определить: Знает ли Сергей Бориса? Кого знает Валентина? Кого знает Мария?

Даны результаты сдачи экзаменов для группы из пяти учеников:

Таблица 7 — Успеваемость.

Фамилия.

Алгебра.

Геометрия.

История.

Бобров.

Вяткин.

Кротов.

Соснин.

Вавилов.

Построить базу знаний о результатах экзаменов, определив в ней следующие правила:

отличник — человек, у которого по всем предметам пятерки;

двоечник — есть хотя бы одна двойка;

математик — по алгебре и по геометрии учится на 4 и 5;

введите предикаты алгебра, геометрия, история для определения оценки Y для ученика X.

Получить ответы на следующие вопросы: Является ли Вяткин отличником? Определить всех отличников. Является ли Соснин математиком? Определить всех неуспевающих по истории.

Сформировать базу знаний «Квартет» из следующих фактов и правил:

Мартышка играет на скрипке. Осел играет на альте. Козел играет на виолончели. Мишка играет на контрабасе. Четверо музыкантов X, Y, Z и W могут образовать квартет, если один из них играет на скрипке, другой — на альте, третий — на виолончели и четвертый — на контрабасе.

Ответить на вопросы: Кто играет на альте? На чем играет мартышка? Образуют ли квартет Мартышка, Осел, Козел и Мишка? Кто из музыкантов данной базы знаний может образовать квартет?

База знаний «Воинская служба»:

возраст (борис, 18), возраст (андрей, 17), возраст (михаил, 18), возраст (анна, 18), возраст (юлия, 17), мужчина (андрей), мужчина (борис), мужчина (михаил), женщина (анна), женщина (юлия).

Определить правило подлежит призыву, не_подлежит_призыву.

Сформулировать вопросы: Кто подлежит призыву? Подлежит ли призыву Анна?

База знаний «Семья»:

мать (екатерина, юлия), мать (екатерина, мария), мать (анна, екатерина), отец (петр, юлия), отец (виктор, петр), отец (андрей, екатерина).

Дополните базу данных предикатом мужчина, женщина. Определите правила дед, бабушка, внук, внучка, тетя, дядя.

Сформулировать вопросы на Прологе:

Кто является ребенком Екатерины и Петра? Кто является дедом Юлии? Кто является бабкой Юлии?

Построить базу знаний и сформулировать к ней вопросы, основываясь на следующих утверждениях: Резвый — это собака. Рекс-это собака. Белка — это кошка. Быстрая — это лошадь. Резвый — черная. Белка — белая. Рексрыжая. Быстрая — белая. Домашние животные — это собака или кошка. Животные — это либо лошадь, либо домашние животные. Том владеет тем, кто собака и не черного цвета. Кейт владеет тем, кто-либо черного цвета, либо лошадь.

Построить базу знаний. Муська — коричневая кошка, Стрелка — черная кошка, Мурка — рыжая кошка. Рекс, Дружок и Мухтар — собаки. Дружок — рыжая, Мухтар — белая. Все животные, которыми владеют Анатолий и Николай, имееют родословные. Анатолий владеет всеми черными и коричневыми животными, а Николай владеет всеми собаками небелого цвета, которые не являются собственностью Анатолия. Иван владеет Муркой, если Николай не владеет Муськой и если Мухгар не имеет родословной. Рекс — пятнистая собака. Определить, какие животные не имеют хозяев.

Составить базу знаний «Знакомства» из следующих фактов и правил:

Мери прелестна. Джон добрый. Джон мужественный. Джон сильный. Некто счастлив, если богатый или нравится женщинам. Мужчина нравится женщине, если женщина нравится мужчине и он добрый, либо мужчина добрый и сильный. Мужчине нравится женщина, если она прелестна.

Сформулировать вопрос: счастлив ли Джон? Найти мужчин, которые могут нравиться женщинам.

Ответьте на вопрос «Что ест моя кошка?», если:

Птицам нравятся червяки. Кошкам нравятся рыбы. Друзья нравятся друг другу. Моя кошка мой друг. Моя кошка ест все, что ей нравится.

Запрограммируйте утверждения.

Число четное. Число не четное. Ни одно число не является четным и нечетным одновременно. Число не четное, если следующее за ним четное. Число, следующее за данным …

Вывести самых молодых жильцов дома и номера квартир, в которых они живут.

Вывести фамилии студентов и их возраст с максимальным размером стипендии.

Вывести фамилии сотрудников предприятия и их оклады, оклады которых меньше среднего.

Лабораторные работы. Логическое программирование.

Вывести студентов с заданной фамилией и посчитать их количество.

Лабораторная работа № 5. Решение логических задач Пример 1. Беседует трое друзей: Белокуров, Рыжов, Чернов. Брюнет сказал Белокурову: «Любопытно, что один из нас блондин, другой брюнет, третий — рыжий, но ни у кого цвет волос не соответствует фамилии». Какой цвет волос у каждого из друзей?

Для решения построим вспомогательную таблицу:

Таблица 8 — Вспомогательная таблица соответствия.

Цвет Фамилия.

Белокуров.

Рыжов.

Чернов.

блондин.

;

рыжий.

;

брюнет.

;

;

Выводы:

Белокуров не брюнет и не блондин;

Чернов не черный, цвет волос Чернова и Белокурова не совпадают;

Рыжов не рыжий, цвет волос у Рыжова и Белокурова, Рыжова и Чернова не совпадают.

Программа 23. Логическая задача на соответствие.

Predicates.

fam (symbol).

color (symbol).

cootvet (symbol, symbol).

Clauses.

fam (belokurov).

fam (ryzov).

fam (chernov).

color (ryziy).

color (cherniy).

color (beliy).

cootvet (X, Y): — fam (X), color (Y), X=belokurov,.

not (Y=cherniy), not (Y=beliy).

cootvet (X, Y): — fam (X), color (Y), X= chernov,.

not (Y=cherniy), not (cootvet (belokurov, Y).

cootvet (X, Y): — fam (X), color (Y), X= ryzov,.

not (cootvet (belokurov, Y), not (cootvet (chernov, Y).

Пример 2. На скамейке сидели Петя, Боря, Коля. Петя справа от Бори, Боря справа от Коли. Кто сидел посередине? Кто сидел с правого (левого) края? Кто сидел между указанными объектами (увеличьте число объектов)?

Программа 24. Логическая задача на выяснение порядка.

Predicates.

rayd (symbol, symbol, symbol).

sprava (symbol, symbol).

seredina (symbol.

kr_cl (symbol).

kr_cpr (symbol).

Clauses.

sprava (kolya, boray). /*Справа от Коли Боря*/.

sprava (boray, petay).

rayd (X, Y, Z): — sprava (X, Y), sprava (Y, Z).

seredina (X): — rayd (_, X,_).

kr_cl (X): — rayd (X,_,_).

kr_cpr (X): — rayd (_,_, X).

Задания для самостоятельной работы Коля и Саша носят фамилии Шилов и Гвоздев. Какую фамилию носит каждый из них, если Саша с Шиловым живут в разных домах.

В соревнованиях по бегу Юра, Гриша и Толя заняли три первых места. Какое место занял каждый ребенок, если Гриша занял не второе и не третье место, а Толя не третье?

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

На заводе работали три друга: слесарь, токарь и сварщик. Их фамилии Борисов, Иванов и Семенов. У слесаря нет ни братьев, ни сестер. Он самый младший из друзей. Семенов, женатый на сестре Борисова, старше токаря. Назвать фамилии слесаря, токаря и сварщика.

В бутылке, стакане, кувшине и банке находятся молоко, лимонад, квас и вода. Известно, что вода и молоко не в бутылке, сосуд с лимонадом находится между кувшином и сосудом с квасом, в банке — не лимонад и не вода. Стакан находится около банки и сосуда с молоком. Как распределены эти жидкости по сосудам.

Воронов, Павлов, Левицкий и Сахаров — четыре талантливых молодых человека. Один из них танцор, другой художник, третий-певец, а четвертый-писатель. О них известно следующее: Воронов и Левицкий сидели в зале консерватории в тот вечер, когда певец дебютировал в сольном концерте. Павлов и писатель вместе позировали художнику. Писатель написал биографическую повесть о Сахарове и собирается написать о Воронове. Воронов никогда не слышал о Левицком. Кто чем занимается?

Три друга заняли первое, второе, третье места в соревнованиях универсиады. Друзья разной национальности, зовут их по-разному, и любят они разные виды спорта. Майкл предпочитает баскетбол и играет лучше, чем американец. Израильтянин Саймон играет лучше теннисиста. Игрок в крикет занял первое место. Кто является австралийцем? Каким спортом увлекается Ричард?

Три девочки Маша, Рита, Лена пошли гулять. На улице было жарко, и они купили мороженое «Белка», «Стрелка», «Гагара». Какое мороженое купила каждая из девочек, если Лена купила не «Белку» и не «Гагару», а Рита — не «Гагару».

В комнате находятся Коля, Света, Оля. Каждый из них сидит на отдельной мебели (кровать, стул, диван). Известно, что Коля сидит не на стуле и не на кровати. Света не сидит на стуле. Кто где сидит?

На столе лежат ручка, карандаш, фломастер, красного, синего и зеленого цвета. Известно, что ручка лежит между предметом красного и зеленого цвета. Карандаш либо зеленый, либо синий.

Однажды в Артеке за круглым столом оказалось пятеро ребят из Москвы, Санкт-Петербурга, Новгорода, Перми, Томска: Денис, Игорь, Иван, Алеша, Сергей. Москвич сидел между томичем и Сергеем, санкт-петербуржец — между Денисом и Игорем, а напротив него сидел пермяк и Иван. Алеша ни разу не был в Санкт-Петербурге, а Денис не бывал в Москве и Томске, а томич с Игорем регулярно переписываются. Определите, кто в каком городе живет каждый из ребят.

На улице, встав в кружок, беседует четыре девочки: Аня, Валя, Надя, Галя. Девочка в зеленом платье — не Аня и не Валя — стоит между девочкой в голубом платье и Галей. Девочка в белом платье стоит между девочкой в розовом платье и Валей. Какого цвета платье у каждой из девочек?

Трое юношей: Коля, Дима и Юра влюблены в трех девушек: Аню, Лену, Вику. Но эта любовь без взаимности. Коля любит девушку, влюбленную в юношу, который любит Лену. Дима любит девушку, влюбленную в юношу, который любит Вику. Лена не любит Юру.

Составить базу знаний по сказке «Репка». Фактами в этой базе должны быть утверждения типа тянет (X, Y). Составить правила, определяющие: кто первый тянет репку, кто последний тянет реку, кто тянет после бабки, кто тянет на четвертом месте.

Даны числа X, Y, Z, T. X меньше Yи меньше T; Y больше Z и больше T; Z больше X и меньше T. В каком порядке расположены эти числа.

На одной yлице стоят 5 домов, окpашенных в 5 pазных цветов. В каждом доме живет гpажданин дpyгой стpаны. Каждый из них пьёт свой напиток, курит свои сигареты и содержит своё домашнее животное. Определите, кто из них содержит рыб? Британец живёт в красном доме. У шведа есть собака. Датчанин пьёт чай. Зелёный дом стоит слева от белого и вплотную к немy. Хозяин зелёного дома пьёт кофе. У того, кто курит Pall-Mall, есть птицы. Хозяин желтого дома курит Dunhills. Хозяин среднего дома пьёт молоко. Норвежец живёт в пеpвом доме. Человек, который курит Blends, живёт рядом с хозяином котов. Тот, кто содержит лошадей, живёт pядом с тем, кто кypит Dunhills. Тот, кто курит Blue Master, пьёт пиво. Hемец кypит Prince. Норвежец живёт рядом с синим домом. У того, кто курит Blends, есть сосед, который пьёт водy.

Лабораторная работа № 6. Головоломки. Игровые программы Пример 1. Нарисовать конверт, не отрывая карандаша от бумаги и не проводя два раза по одной и той же линии. Введем обозначения, ребра — латинскими буквами, вершины — цифрами.

Знания о структуре графа можно представить следующим образом: rebro (a, 1,2), rebro (a, 2,1), rebro (b, 2,3), rebro (b, 3,2), rebro (c, 1,3), rebro (c, 1,2), rebro (c, 3,1), rebro (d, 2,4), rebro (d, 4,2), rebro (e, 2,5), rebro (e, 5,2), rebro (f, 3,4), rebro (f, 4,3), rebro (g, 3,5), rebro (g, 5,3), rebro (h, 4,5), rebro (h, 5,4).

Решением задачи должен явиться список пройденных ребер графа, причем длина его должна быть равна 8, и в нем не должно быть повторяющихся ребер, что можно описать так:

prohod (T, P):-length (P, 8), write_list (P),!.

prohod (T, P):-rebro (R, T, H), not (member (R, P), prohod (H,[R|P).

T-текущая вершина графа, а P-список пройденных ребер. Первое правило означает, что если длина списка P пройденных вершин становится равной 8, то список P выводится на печать. Это правило ограничивает рекурсивный перебор вершин и ребер, проводимый вторым правилом. Второе правило является генератором перебора, оно перебирает предикаты «rebro ()» и находит такое ребро R, из текущей вершины Т в новую H, чтобы оно не принадлежало списку P, зато это ребро добавляется в качестве головы к списку P, и поиск дальнейшего пути производится уже из новой вершины H.

Пример 2. Программа «Угадай число».

Программа 25. Логическая игра «Угадай число».

Predicates.

play_the_game.

give_info.

play_it.

generate_rand (integer).

play_it_sam (integer).

test_and_tell (integer, integer).

say_you_got_it_right (integer).

say_too_big.

say_too_small.

Clauses.

play_the_game:-give_info, play_it.

/*информация для пользователя*/.

give_info:-makewindow (1,7,7," «, 0,0,25,80),.

makewindow (2,7,7," Угадай число", 2,20,22,45),.

nl, write («Это игра Угадай число»),.

nl, write («Я загадаю число из»),.

nl, write («интервала [1,100]»),.

nl, write («Я буду подсказывать больше»),.

nl, write («или меньше задуманное число»), nl,.

nl, write («Кода будешь готовнажми space bar»),.

nl, readchar (_),.

clearwindow.

/*выполнение игры*/.

play_it:-generate_rand (A),.

play_it_sam (A).

/*генерация случайного числа*/.

generate_rand (X):;

random®,.

X=1+R*100,.

nl, write («Я загадал число»),.

nl, write («Теперь дело за Вами»), nl.

/*запрос к пользователю */.

play_it_sam (X):;

nl, write («Введите свой вариант»),.

nl, readint (G),.

test_and_tell (X, G),.

play_it_sam (X).

/* проверка и выдача результата*/.

test_and_tell (X, X): — say_you_got_it_right (X),!.

test_and_tell (X, Y): — X>Y, say_too_big,!.

test_and_tell (_,_): — say_too_small.

/*выдача сообщений*/.

say_too_big:-nl, write («Загаданное число больше»).

say_too_small:-nl, write («Загаданное число меньше»).

say_you_got_it_right (X):-nl, write («Вы правы»),.

nl, write («Я загадал «, X),.

nl, write («До новых встреч!»),.

nl, write («Нажмите space bar»),.

nl, readchar (_),.

exit.

Goal.

play_the_game.

Пример 3. Игра Баше — 23 спички. На столе 23 спички, 2 игрока по очереди берут от 1 до 3 спичек, проигравшим считается тот, кто возьмет последнюю спичку.

Программа 26. Логическая игра «Игра Баше — 23 спички».

Predicates.

play_the_game.

do_windows.

play (integer, integer, integer).

play_it_again (integer, integer, integer).

real_int (real, integer).

Clauses.

play_the_game:-do_windows, play (23,0,0).

/*правило для образования окон*/.

do_windows:-makewindow (1,7,7," «, 0,0,25,80),.

makewindow (2,7,7," Игра 23 спички", 1,5,22,40),.

nl, write («Добро пожаловать!»),.

M=23, H=0, C=0,.

nl, write («Всего „, M,“ спички»),.

nl, write («По очереди мы будем перемещать »),.

nl, write («спички в свои кучки»),.

nl, write («За раз можно взять 1, 2, 3 спички»), nl,.

nl, write («Проиграет, тот кто заберет последнюю спичку»),.

nl, write («Итак, начнем, всего «, M, «сп.»), nl,.

nl, write («я взял «, C,» сп. Вы взяли «, H, «сп.»), nl.

play (M, H, C):-play_it_again (M, H, C).

/*правило определения победителя*/.

play_it_again (M,_,_):;

M<=0,.

nl, write («Вы выиграли!»),.

nl, write («Нажмите любую клавишу для выхода»),.

readchar (_), clearwindow,!, exit.

play_it_again (1,_,_):;

nl, write («Я выиграл!»),.

nl, write («Нажмите любую клавишу для выхода»),.

readchar (_), clearwindow,!, exit.

play_it_again (M,_,_):;

nl, write («Ваш ход»),.

nl, write («Сколько спичек вы хотите взять?»),.

readint (Hn),.

M2=M-Hn, H2=Hn,.

write («Осталось „, M2,“ сп.»),.

nl, write («Мой ход»),.

random (F), Rea=1+3*F,.

real_int (Rea, Rint),.

M3=M2-Rint,.

nl, write («Я беру „, Rint,“ сп.»),.

nl, write («Осталось «, M3, «сп.»), nl,.

M7=M3,H7=H2,C7=Rint,.

play_it_again (M7,H7,C7).

/*вспомогательное правило*/.

real_int (Re, In):-In=trunc (Re).

Goal.

play_the_game.

Задания для самостоятельной работы Отгадать число, загаданное компьютером, максимум за 3 попытки.

23 спички. Разработать выигрышную стратегию для компьютера.

Имеется два сосуда — на 3 и 5 литров. Как отмерить с их помощью 4 литра воды?

Решите задачу о перевозке фермером через реку волка, козы, капусты.

Раскрасить плоскую карту так, чтобы никакие две смежные области на ней не были раскрашены в одинаковый цвет. В наборе 4 цвета.

Лабиринт задан матрицей соединений, в которой для каждой пары комнат указано, соединены ли они коридором. Построить путь перехода из комнаты «a» в комнату «g»:

Таблица 10 — Поле для лабиринта.

A.

B.

C.

D.

E.

F.

G.

A.

;

B.

;

C.

;

D.

;

E.

;

F.

G.

;

Имеется n городов. Некоторые из них соединены дорогами известной длины. Вся система дорог задана квадратной матрицей n*n, элемент aij<0, если между городами дороги нет, в противном случае равен расстоянию между городами.

Задан лабиринт. Напишите программу для нахождения маршрутов для выхода из этого лабиринта. Начало маршрута точка О. Закрашенная клетка — стена.

Быки и коровы. Игрок A выбирает секретный код, представляющий последовательность из N различных десятичных цифр (N=4). Игрок пытается угадать задуманный код и спрашивает игрока, А о числе «быков» («быки» — количество совпадающих цифр в одинаковых позициях предполагаемого и задуманного кодов; число «коров" — количество совпадающих цифр, входящих в предполагаемый и задуманный код, но находящиеся на разных позициях).

Лабораторная работа № 7. Обработка файлов. Предикаты для работы с файлами.

deletefile (DOS_filename)-удаление файла.

save (DOS_filename) -сохранение файла.

renamefile (old_DOS_filename, new_DOS_filename)-переименовыфвание файла.

existfile (DOS_filename)-проверка на наличие файла с таким именем.

flush (file_domain)-сброс данных из внутреннего буфера, отведенного для данного устройства записи.

disk (Path) -выбор дисковода и пути доступа.

dir (Path, File_spec, File_name) -Переменой Path должен быть присвоен корректный путь доступа, переменная File_spec задает расширение представляющей интерес группы файлов. Данный предикат выдает каталог имен файлов с заданным расширением; вы можете выбрать среди них нужный и нажать Enter. Имя файла будет присвоено переменой File_name.

При описании файловых доменов тип домена записывается по левую сторону от знака равенства, а имя доомена по правую.

Пример:

file=datafile.

file=datafile1;datafile2.

openwrite (datafile, filename) — открытие файла для записи или создание, где datafileвведеннный пользователем файловый домен, filename-имя файла в DOS, теперь ссылки на datafile будут означать обращение к filename.

writedevice (datafile) -назначение файла в качестве устройства записи.

openread (datafile, filename) — открытие файла для чтения.

readdevice (datafile) -назначение файла устройством чтения.

openmodify (datafile, filename) — открытие файла для редактирования, указатель помещается в начало файла, сместить указатель можно при помощи предиката filepos.

openappend (datafile, filename) — открытие файла для добавления данных в конец файла.

closefile (datafile) -закрытие файла Рассмотрим примеры работы с файлами.

Пример 1. Вывести информацию на экран дисплея и в файл на диске.

Программа 27. Запись данных в файл.

Domains.

str = string.

file = datafile.

Predicates.

data (str).

write_lines.

Goal.

openwrite (datafle," file1. dat"),.

write_lines,.

closefile (datafile).

Clauses.

data («Старому году оставьте печали,!»).

data («Забудьте обиду, беду.»).

data («Только успехов, здоровья и счастья,»).

data («Мы Вам желаем в Новом году!»).

write_lines:;

data (Line),.

write (««, Line), nl,.

writedevice (datafile),.

write (««, Line), nl,.

writedevice (screen), /*для вывода данных на экран*/.

fail, write_lines.

Пример 2. Вывести данные файла на экран.

Программа 28. Чтение данныхиз файла.

Domains.

str = string.

file = datafile.

Predicates.

read_write_lines.

Goal.

openread (datafile," file1. dat"),.

read_write_lines,.

closefile (datafile).

Clauses.

read_write_lines :;

readdevice (datafile),.

not (eof (datafile)),.

readln (Line),.

writedevice (screen),.

write (««, Line), nl,.

read_write_lines.

Пример 3. Записать в файл данные, вводимые с клавиатуры Программа 29. Запись в файл данных, вводимых с клавиатуры.

Domains.

file = datafile.

dstring, cstring = string.

Predicates.

readin (dstring, cstring).

create_a_file.

Goal.

create_a_file.

Clauses.

create_a_file :;

nl, nl,.

write («Пожалуйста, введите полное имя файла.»),.

nl, nl,.

readln (Filename), openwrite (datafile, Filename),.

writedevice (datafile),.

readln (Dstr),.

concat (Dstr," 1310″, Cstr),.

readin (Dstr, Cstr),.

closefile (datafile).

readin («done» ,_) : — !.

/*ввод данных завершится после вода слова «done» */.

readin (_, Cstr) :;

write (Cstr),.

readln (Dstrl),.

concat (Dstrl, «1310», Cstr1),.

writedevice (datafile),.

readin (Dstrl, Cstr1).

Предикаты для работы с файлами прямого доступа.

Openmodify (fn, filename)-связывает логическое имя файла fn с именем файла.

Filepos (fn, pos, mode)-устанавливает указатель файла в заданную позицию Таблица 12 — Действие системы при операциях с файлами прямого доступа.

Режим mode.

Действия системы.

Смещение берется относительно начала файла.

Смещение берется относительно текущей позиции.

Смещение берется относительно конца файла.

Пример 4. Данные, вводимые с клавиатуры, записать в файл прямого доступа.

Программа 30. Запись данных в файл прямого доступа.

Domains.

file = datafile.

Predicates.

create_a_random_access_file.

write_read_more (real, string).

pad_str (strIng, string, integer).

Goal.

create_a_random_access_file.

Clauses.

create_a_random_access_file :;

write («Please enter filename:»), nl,.

readln (Filename),.

openwrite (datafile, Filename),.

closefile (datafile),.

openmodify (datafile, Filename),.

write («Введите строку»), nl,.

readln (Dstr),.

write_read_more (0,Dstr),.

closefile (datafile).

write_read_more (_," done") :;

nl, write («Press the space bar.»),.

readchar (_), exit.

write_read_more (Index, Dstr) :;

writedevice (datafile),.

filepos (datafile, Index, 0),.

pad_str (Dstr, Padstr, 38),.

concat (Padstr, «1013», Cstr),.

write (Cstr),.

writedevice (screen),.

write («Введите строку»), nl,.

readln (Dstr1),.

Index1 = Index + 40,.

write_read_more (Index1, Dstr1).

pad_str (Instr, Instr, Length) :;

str_len (Instr, Testlength),.

Testlength >= Length,!.

pad_str (Instr, Padstr, Length) :;

concat (Instr," -", Newstr),.

pad_str (Newstr, Padstr, Length).

Пример 5. Вывести на экран заданную строку файла прямого доступа и выдача их на экран Программа 31. Вывод данных из файла прямого доступа.

Domains.

file = datafile.

Predicates.

read_a_random_access_file.

Goal.

read_a_random_access_file.

Clauses.

read_a_random_access_file:;

write («Please enter filename:»), nl, readln (Filename),.

openread (datafile, Filename),.

write («Type 1n record number: «), nl,.

readreal (Record),.

Index = (Record — 1) * 40,.

readdevice (datafile),.

filepos (datafile, Index, 0),.

readln (Cstr),.

write (Cstr), nl, nl,.

write («Press the space bar.»), nl,.

readdevice (keyboard),.

readchar (_),.

closefile (datafile),.

exit.

Задание для самостоятельной работы В файле задана последовательность целых чисел, найти сумму чисел, предшествующих первому отрицательному.

Переписать данные файла в обратном порядке.

Вывести на экран данные файла в неубывающем порядке.

Записать результат сложения чисел, содержащихся в файлах в третий.

Переписать числа из файла в другой, дописав за каждым его квадрат.

Лабораторная работа № 8. Создание динамической базы данных. Предикаты для работы с базой данных Для описания предикатов динамической базой данных предназначен раздел database. База данных (БД) называется динамической потому, что во время работы можно добавлять, удалять содержащиеся в них утверждения. Другая важная особенность динамических баз данных состоит в том, что она может быть записана на диск и считана с диска в оперативную память.

Иногда предпочтительно иметь часть информации БД в виде утверждений статической БД. Эти данные заносятся в динамическую сразу после активизации программы. В общем случае, предикаты статической БД имеют другое имя, но ту же самую форму представления данных, что и предикаты динамической.

Предикаты для работы с динамической БД:

Asserta заносит новый факт в БД, новый факт помещается перед всеми уже внесенными утверждениями.

Assertz помещает новый факт в БД за всеми имеющимися утверждениями.

Retract удаляет утверждение из БД.

Save сохраняет находящуюся в оперативной памяти БД в текстовом файле. Синтаксис этого предиката таков Save (DOS_file_name).

consult (DOS_file_name) считывает в память файл БД.

readterm (Domain, Term) используется для чтения из файла объектов, относящихся к определенному в программе домену.

Предикат findall позволяет собрать все имеющиеся в базе данные в список, который может быть полезен при дальнейшей работе.

В качестве примера рассмотрим БД по игрокам футбольных команд, БД допускает следующие операции: добавление, удаление и просмотр данных. Эта программа создает БД и содержит её в оперативной памяти. Для работы с ней использовался предикат player с аргументами p_name-имя игрока, k_name-название клуба, p_number-номер игрока, pos-позиция игрока, heightрост, weight-вес, nfl_exp-стаж выступлений, college-учебное заведение) Программа 32. Динамическая база данных «Футбольная команда».

Domains.

p_name, k_name, pos, college = string.

p_number, height, weight, nfl_exp = integer.

Database.

dplayer (p_name, k_name, p_number, pos, height, weight, nfl_exp, college).

Predicates.

repeat.

do_mbase.

assert_database.

menu.

process (integer).

clear_database.

player (p_name, k_name, p_number, pos, height, weight, nfl_exp, college).

error.

Goal.

do_mbase.

Clauses.

repeat.

repeat:-repeat.

/*База данных футбол*/.

player («Иванов Иван» ," Спартак", 13," з", 205,90,3, «ГГПИ»).

player («Петров Петр» ," Динамо", 96," пз", 185,78,4, «ГТК»).

player («Сидоров Денис» ," Локомотив", 69," в", 190,88,2, «ГТУ»).

player («Васечкин Илья» ," Торпедо", 5," в", 195,80,5, «ГГПИ»).

player («Алексеев Дима» ," ЦСКА", 1," н", 165,67,2, «ГТК»).

player («Карпов Павел» ," Зенит", 12," н", 170,74,1, «ГКК»).

/*конец начальных данных*/.

assert_database:;

player (P_name, K_name, P_number, Pos, Height, Weight, Nfl_exp, College), assertz (dplayer (P_name, K_name, P_number, Pos, Height, Weight, Nfl_exp,.

College)),.

fail.

assert_database:-!.

clear_database:;

retract (dplayer (_,_,_,_,_,_,_,_)),.

fail.

clear_database:-!.

do_mbase :;

assert_database,.

makewindow (1,7,7," FOOTBALL DATABASE «, 0,0,25,80),.

menu,.

clear_database.

menu :;

repeat, clearwindow,.

nl,.

write («************************************* «), nl,.

write («* 1. Добавление нового игрока в БД * «), nl,.

write («* 2. Удаление игрока из БД * «), nl,.

write («* 3. Просмотр данных * «), nl,.

write («* 4. Выход из программы * «), nl,.

write («************************************* «), nl,.

write («Пожалуйста, сделайте свой выбор 1, 2, 3 or 4: «),.

readint (Vibor), nl, process (Vibor), Vibor = 4,!.

/* Добавление информации об игроке в БД */.

process (1) :;

makewindow (2,7,7," Добавление данных", 2,20,18,58), shiftwindow (2),.

write («Введите, пожалуйста:»), nl,.

write («Имя игрока: «), readln (P_name),.

write («Название клуба: «), readln (K_name),.

write («Номер игрока: «), readint (P_num),.

write («Позицию: «), readln (Pos),.

write («Рост: «), readint (Ht),.

write («Вес: «), readint (Wt),.

write («Стаж выступлений: «), readint (Exp),.

write («Название учебного заведения: «), readln (College),.

assertz (dplayer (P_name, K_name, P_num, Pos, Ht, Wt, Exp, College)),.

write (P_name," добавлен в БД"), nl,!,.

write («Press space bar. «), readchar (_),.

removewindow, shiftwindow (1).

/* Удаление */.

process (2) :;

makewindow (3,7,7," Удаление данных", 10,30,7,40), shiftwindow (3),.

write («Введите имя удаляемого игрока: «), readln (P_name),.

retract (dplayer (P_name,_,_,_,_,_,_,_)),.

write (P_name," удален из БД «), nl, !,.

write («Press space bar.»), readchar (_), removewindow,.

shiftwindow (1).

/* Просмотр данных об игроке*/.

process (3) :;

makewindow (4,7,7," Просмотр «, 7,30,16,47), shiftwindow (4),.

write («Введите имя для просмотра: «), readln (P_name),.

dplayer (P_name, T_name, P_number, Pos, Ht, Wt, Exp, College), nl,.

write («Имя игрока: «, P_name), nl,.

write («Название клуба: «, T_name), nl,.

write («Номер игрока: «, P_number), nl,.

write («Позиция: «, Pos), nl,.

write («Рост: «, Ht), nl,.

write («Вес: «, Wt), nl,.

write («Стаж выступлений: «, Exp), nl,.

write («Учебное заведение: «, College), nl, nl,!,.

write («Press space bar»), readchar (_),.

removewindow, shiftwindow (1).

process (3) :;

makewindow (5,7,7," Неудача «, 14,7,5,60), shiftwindow (5),.

write («К сожалению, данных нет.»), nl,.

write («Извините, пока!»), nl,!,.

write («Press space bar.»), readchar (_),.

removewindow, shiftwindow (1).

/* Выход */.

process (4) :;

write («До новых встреч! «), readchar (_), exit.

/*Обработка ошибки*/.

process (Vibor):;

Vibor5, error.

error:;

write («Пожалуйста выберите число от 1 до 4»),.

write («(Press the spase bar to continue)»), readchar (_).

Задание для самостоятельной работы Модифицируйте программу, добавив в меню пункты:

Вывод списка игроков.

Сохранение данных в файл.

Выборка данных по 1 из трех критериев.

Лабораторная работа № 9. Применение языка для решения задач ИИ. Создание экспертных систем Пример 1. Рассмотрим пример ЭС для идентификации породы собак. Она помогает потенциальному хозяину выбрать породу собаки в соответствие с определенными критериями.

В данной ЭС используются следующие характеристики:

Короткая шерсть;

Длинная шерсть;

Рост меньше 30 дюймов;

Рост меньше 22 дюймов;

Низкопосаженный хвост;

Длинные уши;

Хороший характер Вес больше 100 фунтов.

Каждая характеристика для конкретной породы либо верна, либо не верна. Для каждой породы справедливы следующие характеристики:

Таблица 13 — Характеристики собак.

Порода.

Характеристики.

Английский бульдог.

1,4,5,7.

Гончая.

1,4,6,7.

Дог.

1,3,6,7,8.

Амер.гончая.

1,5,6,7.

Кокер-спаниэль.

2,4,5,6,7.

Ирландский сеттер

2,3,6.

Колли.

2,3,5,7.

Сенбернар

2,5,7,8.

Программа 33. «Эксперт по породам собак».

*Эксперт по породам собак*/.

/*Назначение: Демонстрация работы ЭС*/.

Domains.

n=integer.

list=n*.

dog=symbol.

Predicates.

rule (n, dog, list).

cond (n, string).

do_expert.

show_menu.

do_consulting.

process (n).

test (n, list).

topic.

repeat.

Goal.

do_expert.

Clauses.

rule (1," английский бульдог" ,[1,4,5,7]).

rule (2," гончая" ,[1,4,6,7]).

rule (3," дог" ,[1,3,6,7,8]).

rule (4," американская гончая" ,[1,5,6,7]).

rule (5," коккер-спаниель" ,[2,4,5,6,7]).

rule (6," ирландский сеттер" ,[2,3,6]).

rule (7," колли" ,[2,3,5,7]).

rule (8," сенбернар" ,[2,5,7,8]).

/*Характеристики*/.

cond (1," короткошерстная").

cond (2," длинношерстная").

cond (3," рост ниже 30 дюймов").

cond (4," рост ниже 22 дюймов").

cond (5," низкопосаженный хвост").

cond (6," большие уши").

cond (7," хороший характер").

cond (8," вес более 100 фунтов").

do_expert:;

makewindow (1,7,5 ," ЭКСПЕРТНАЯ СИСТЕМА", 0,0,25,80),.

show_menu.

repeat.

repeat:-repeat.

/*Вывод меню*/.

show_menu:;

repeat,.

write («***************************»), nl,.

write («*****Добро пожаловать!*****»), nl,.

write («* *»), nl,.

write («*****1-консультация********»), nl,.

write («*****2-список**************»), nl,.

write («*****3-выход***************»), nl,.

write («* *»), nl,.

write («****Сделайте свой выбор****»), nl,.

readint (X),.

process (X), fail.

/*Обработка 1 пункта меню «Консультация"*/.

process (1):;

do_consulting,.

readchar (_),.

shiftwindow (1),.

clearwindow.

/*Обработка 2 пункта меню «Вывод списка"*/.

process (2):;

makewindow (2,7,7," «, 5,20,12,25),.

topic,.

readchar (_),.

shiftwindow (1),.

clearwindow.

/* Обработка 3 пункта меню «Выход"*/.

process (3):;

removewindow,.

exit.

/*Вывод пород собак*/.

topic:;

rule (X, Y,_),.

write (X,". «, Y),.

nl, fail.

topic.

/*Консультация*/.

do_consulting:;

test (1,List),.

rule (_, X, List),.

write («Ваш выбор:», X),!.

do_consulting:;

write («Мне жаль, что не смог Вам помочь.»).

/*Тестирование*/.

test (9,[]):-!.

test (1,[N|List]):;

cond (N, Text),.

makewindow (2,7,7," «, 5,20,10,35),.

write («Вопрос:-», Text," ?"), nl,.

write («1-да»), nl,.

write («0-нет»), nl,.

readint®, R=1,!, test (3,List).

test (1,List): — test (2,List),!.

test (N,[N|List]):;

cond (N, Text),.

makewindow (2,7,7," «, 5,20,10,35),.

write («Вопрос:-», Text," ?"), nl,.

write («1-да»), nl,.

write («0-нет»), nl,.

readint®, M=N+1,.

R=1,!, test (M, List).

test (N, List):-M=N+1,test (M, List).

Задания для самостоятельной работы Разработать экспертную систему, тему выбрать самостоятельно. Отчет должен содержать следующие пункты:

Тема ЭС. Назначение, возможности программы. Разработать структурно-функциональную схему. Определить базу знаний, разработать механизм вывода, интерфейс программы. По каким параметрам программу можно отнести к классу ЭС.

Показать весь текст
Заполнить форму текущей работой