Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Логическое программирование1 / 9_Лабораторна_робота_ЛП_2012-13.doc
Скачиваний:
14
Добавлен:
07.02.2016
Размер:
186.37 Кб
Скачать

18

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ХЕРСОНСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

Кафедра інформацiйних технологій

МЕТОДИЧНІ РЕКОМЕНДАЦІЇ

та контрольні завдання до виконання лабораторних робіт

з дисципліни „Логічне програмування”

для студентів третього курсу

для напряму підготовки 6.050102 “Комп’ютерна інженерія”

за професійним спрямуванням Компютерні системи та мережі

галузі знань 0501 “Інформатика та обчислювальна техніка”

факультету кібернетики

ЛАБОРАТОРНА РОБОТА 9

Херсон – 2012 р.

Методичні рекомендації та контрольні завдання до виконання лабораторних робіт з дисципліни „Логічне програмування” для студентів третього курсу напряму підготовки 6.050102 “Комп’ютерна інженерія” (за професійним спрямуванням “Комп’ютерні системи та мережі”) галузі знань 0501 “Інформатика та обчислювальна техніка” факультету кібернетики. Лабораторна робота 9.

Укладач: Веселовська Г.В., доцент кафедри інформаційних технологій ХНТУ, к.т.н., доцент, кількість сторінок 18.

Рецензент: Кибалко І.І., доцент кафедри інформаційних технологій ХНТУ, к.т.н.

Затверджено

на засіданні кафедри інформаційних технологій ХНТУ,

протокол № 1 від 31.08.2012 р.

Завідувач кафедри інформаційних технологій ХНТУ, д.т.н., професор, заслужений діяч науки і техніки України

____________________ В.Є.Ходаков

Відповідальний за випуск В.Є.Ходаков, завідувач кафедри інформаційних технологій ХНТУ, д.т.н., професор, заслужений діяч науки і техніки України.

Лабораторна робота 9

Тема: Робота зі списками в процесі логічного програмування мовою Пролог. Частина 2.

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

1. План виконання лабораторної роботи

1. Вивчити основні теоретичні відомості до лабораторної роботи.

2. Ознайомитися з методичними вказівками для самостійної роботи студентів до лабораторної роботи 9.

3. Дати відповіді на контрольні питання.

4. Виконати завдання для самоперевірки.

5. Виконати контрольні завдання.

6. Оформити та захистити звіт з лабораторної роботи (вимоги до оформлення та захисту лабораторної роботи знаходяться в Додатку А, а зразок оформлення титульного аркуша звіту про виконання лабораторної роботи знаходиться в Додатку Б).

2. Основні теоретичні відомості

2.1. Вступні пояснення до лабораторної роботи

У попередній лабораторній роботі ви ознайомилися з одним із прикладів задавання та рекурсивної обробки списків, в якому виконувалося виведення на екран комп`ютеру стовпчику чисел, які початково були представлені як елементи списку, заданого в меті Пролог-програми.

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

2.2. Приклад 2 роботи зі списками (рекурсивне визначення довжини заданого списку)

У наведеному далі лістингу 9_1 представлено приклад Пролог-програми, що здійснює визначення довжини списку (підрахунок кількості елементів списку), заданого в меті даної програми (в розділі Goal).

Для того, щоб визначити довжину списку, потрібно розглянути два характерних випадки:

1) для порожнього списку;

2) для непорожнього списку.

Випадок 1. Якщо список є порожнім, то його довжина дорівнює 0.

Даний випадок буде реалізовано за допомогою наступного правила, що містить стандартний предикат cut (!): list_length ([ ], 0):- !.

Випадок 2. Якщо список не є порожнім, то визначити його довжину можна рекурсивно в наступний спосіб:

– розділити список на голову та хвіст;

– підрахувати довжину хвоста списку;

– збільшити отриману довжину хвоста списку на одиницю (врахувати одиничну довжину попередньо відокремленої голови списку).

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

list_length (List, Length):-

List = [H | T],

list_length (T, Length_T),

Length = Length_T+1.

Результат роботи Пролог-програми має наступний вигляд:

Length = 2

% Sheet 9_1. Primer 2_1 on the creating and recursive processing for list

DOMAINS

intlist = integer*

PREDICATES

list_length (intlist, integer)

CLAUSES

list_length ([ ], 0):- !.

list_length (List, Length):-

List = [H | T],

list_length (T, Length_T),

Length = Length_T+1.

GOAL

list_length ([1, 2], Length),

write("Length = ", Length).

Другу частину правила виведення list_length можна записати ще більш коротко, виконавши наступні дії:

– перенести розділення списку на голову та хвіст до заголовку речення;

– позбавитися від зайвої змінної List.

Зазначений варіант другої частини правила виведення list_length буде реалізовано за допомогою наступного речення:

list_length ([H | T], Length):-

list_length (T, Length_T),

Length = Length_T+1.

Відповідну модифікацію Пролог-програми представлено на лістингу 9.2.

% Sheet 9_2. Primer 2_2 on the creating and recursive processing for list

DOMAINS

intlist = integer*

PREDICATES

list_length (intlist, integer)

CLAUSES

list_length ([ ], 0):- !.

list_length ([H | T], Length):-

list_length (T, Length_T),

Length = Length_T+1.

GOAL

list_length ([1, 2], Length),

write("Length = ", Length).

У даному прикладі слід звернути увагу на те, в який спосіб формується вихідне значення – довжина списку:

– лічильник для підрахунку кількості елементів у списку обнуляється в той момент, коли зупиняється прямий цикл рекурсії (тобто початковий список розбирається до стану порожнього списку-хвоста);

– результат покроково налічується в процесі виходу зі зворотного циклу рекурсії.

Для того, щоб краще зрозуміти, як саме працює наведений вище приклад, зручно скористатися деревом цілей, зображеним на рисунку 9.1.

Рисунок 9.1. Дерево цілей Пролог-програми, представленої на лістингу 9.2.