Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Логическое программирование1 / 1-3_ЛР_4КСМ_Логічне_прогр._2014-15.doc
Скачиваний:
20
Добавлен:
07.02.2016
Размер:
396.8 Кб
Скачать

5. Контрольні завдання

5.1. Контрольне завдання 1

Варіант 1. Напишіть Пролог-програму, що використовує предикат

capital(state,city) /* столиця (країна, місто) */

Введіть до бази даних твердження, що стосуються вашої країни та трьох її сусідів. Програма має бути інтерактивною, а тому не включайте до неї розділу goal. Запустіть програму та введіть цілі, що реалізують наступні питання: 1) яке місто є столицею вашої країни ? 2) столицею якої країни є Париж ?

Варіант 2. Напишіть Пролог-програму, що використовує предикат

cities_of_state(state,city1,city2,city3,city4)

/* міста країни (країна, місто1, місто2, місто3, місто4) */

Введіть до бази даних твердження для п`яти країн та їх міст.

Запустіть програму та задайте таку зовнішню ціль, щоб програма вивела на екран комп`ютеру назви чотирьох міст однієї з країн.

Варіант 3. Напишіть Пролог-програму "Президенти", що повинна демонструвати використання різних типів об`єктів.

Твердження програми мають містити наступні відомості про шість президентів США:

№ з/п

Прізвище

Партія

Штат

Рік народження

Роки у влади

1

Ейзенхауер

республіканець

Техас

1880

1918-1953

2

Кенеді

демократ

Масачусетс

1917

1961-1963

3

Джонсон

демократ

Техас

1908

1963-1969

4

Ніксон

республіканець

Каліфорнія

1913

1969-1974

5

Форд

республіканець

Небраска

1913

1974-1977

6

Картер

демократ

Джорджія

1924

1977-1981

Програма «Президенти» має використовувати наступний предикат:

president(name,party,state,birth_year,year_in,year_out)

/* президент (ім`я, партія, штат, рік народження, початковий рік перебування у влади, кінцевий рік перебування у влади) */

Предикат president повинен мати об`єкти типу символьного рядка та цілого числа, а саме:

domains

name,party,state = symbol

birth_year,year_in,year_out = integer

predicates

president(name,party,state,birth_year,year_in,year_out)

Останні три об`єкти предикату president являють собою цілі числа, а їх доменами є, відповідно, birth_year, year_in та year_out.

Оголошення вказаних вище доменів (birth_year, year_in та year_out) у розділі програми domains виглядає виключно просто:

birth_year,year_in,year_out = integer

Кома в даному оголошенні виконує роль розділювача в переліку імен доменів одного типу.

Ціль програми є внутрішньою та природньою мовою формулюється наступним чином: "Видати місце, рік народження, початковий і кінцевий рік перебування у влади всіх президентів-демократів".

Потрібно також модифікувати програму "Президенти" в такий спосіб, щоб ціль стала зовнішньою.

Запустіть основну та модифіковану версії програми, порівняйте результати їх роботи.

Варіант 4. Модифікуйте Пролог-програму "Родичі" (див. лістинг 3), ввівши правило визначення імені брата. Ціль зазначених змін полягає в отриманні повідомлення про те, що Сем є братом Дебі. Запустіть основну та модифіковану версії програми, порівняйте результати їх роботи.

Варіант 5. Модифікуйте Пролог-програму "Родичі" (див. лістинг 3), ввівши правило визначення імені тітки (дядька, бабусі, дідуся, прабабусі, кузена тощо) та додавши необхідні домени, предикати, твердження.

Передбачте відповідні внутрішні та зовнішні цілі.

Запустіть основну та модифіковану версії програми, порівняйте результати їх роботи.

Варіант 6. Напишіть Пролог-програму "Підбір партнеру" (спрощений прототип програми для служби знайомств), використавши правило для знаходження імені високого чоловіка, блондина, власника спортивного автомобіля.

Програма "Підбір партнеру" повинна демонструвати використання правил для отримання інформації в результаті пошуку відповідності до заданої моделі серед сукупності фактів.

Програма "Підбір партнеру" повинна містити відомості про сім чоловіків за наступними параметрами: зріст; колір волосся; клас машини.

Єдиним доменом програми повинен бути домен man.

Дана програма повинна бути наочним прикладом роботи в Пролозі з простими базами даних.

Варіант 7. Модифікуйте Пролог-програму "Пари країн Європи" (див. лістинг 4) для роботи з зовнішніми цілями.

У відповідь на запрошення «Goal:» введіть зовнішню ціль not(border("Spain","Italy")). Проаналізуйте отриману відповідь.

Варіант 8. Напишіть Пролог-програму «Бібліотека-2», яка використовує наступний дворівневий складений об`єкт:

domains

personal_library = book(title,author,publication)

publication = publication(publisher,year)

collector,title,author,publisher = symbol

year = integer

predicates

collection(collector,personal_library)

Програма "Бібліотека-2" повинна використовувати ті ж дані, що й програма "Бібліотека", але об`єкти publisher і year мають бути об`єктами додатково введеного функтору publication.

Тобто опис предикатів і тверджень має співпадати з відповідними описами в програмі "Бібліотека", а відмінність повинна полягати в описі доменів.

Запустіть на виконання програму "Бібліотека-2" і введіть зовнішню ціль у наступному вигляді:

а) collection(smith, Books).

б) collection(Collector,book(Title,_,publication(_,1967))).

Проаналізуйте, чи повинна опинитися серед перелічених на екрані книг хоча б одна з колекції Kahn?

Змініть опис структур програми "Бібліотека-2", помістивши об`єкти title та author в наступну підструктуру:

volume = volume(author,title)

Не забудьте привести у відповідність синтаксис тверджень.

Тепер ви зможете звертатися до бази даних дещо інакше. Щоб перевірити новий спосіб звертання до бази даних, запустіть модифіковану програму та введіть ціль collection(_,Book(Volume,_)).

Чи буде видано список всіх авторів і книг? Якщо ні, то ще раз перевірте правильність написання тверджень.