
- •2.1 Мета роботи 23
- •3.1 Мета роботи 29
- •4.1 Мета роботи 39
- •Література 51
- •Передмова
- •1 Лабораторна робота № 1 елементарні програми на пролозі. Робота з твердженнями програми за допомогою механізму звороту
- •1.1 Мета роботи
- •1.2 Методичні вказівки до виконання лабораторної роботи
- •1.3 Завдання на лабораторну роботу
- •Дан набір фактів, які мають такі відомості про книги: прізвище автора, назву книги і рік видання. Знайти і вивести на екран по кожному автору назви його книг і їх кількість.
- •1.5 Контрольні питання
- •2 Лабораторна робота № 2 робота з рядками методом висхідної рекурсії
- •2.1 Мета роботи
- •2.2 Методичні вказівки до виконання лабораторної роботи
- •2.3 Завдання на лабораторну роботу
- •2.5 Контрольні запитання
- •3 Лабораторна робота № 3 робота зі списками методом низхідної рекурсії
- •3.1 Мета роботи
- •3.2 Методичні вказівки до виконання лабораторної роботи
- •3.3 Завдання на лабораторну роботу
- •3.5 Контрольні запитання
- •3.5.2 Яким типом даного може бути голова списку і яким типом може бути хвіст списку?
- •4 Лабораторна робота № 4 предикати вводу-виводу.Робота з файлами
- •4.1 Мета роботи
- •4.2 Методичні вказівки до виконання лабораторної роботи
- •4.3 Завдання на лабораторну роботу
- •4.5 Контрольні запитання
- •Додаток а підготовка та виконання програми в середовищі visual prolog 5.2
- •1. Утворення нового проекту в середовищі Visual Prolog 5.2
- •На вкладці General ввести:
- •На вкладці Target обрати:
- •2.Опції компілятору
- •8. Обробка помилок
- •9. Текстовий редактор Visual Prolog
- •Література
Дан набір фактів, які мають такі відомості про книги: прізвище автора, назву книги і рік видання. Знайти і вивести на екран по кожному автору назви його книг і їх кількість.
Дан файл з фактами, які мають відомості з прайс - паперів магазинів по продажу комп’ютерів: назва пристрою, параметри, вартість, № магазину. Визначити і вивести на екран діапазон вартості для кожного виду комплектуючих комп’ютеру, які продаються в магазині.
Варіант 25
Дан набір фактів, які мають такі відомості про книги: прізвище автора, назву книги і рік видання. Знайти кількість книг, виданих кожним автором у вказаному році, а також вивести прізвища авторів, які видавалися в цьому році. Роки задавати діапазоном і перебирати їх програмно.
Дан файл з фактами, які мають відомості з прайс - паперів магазинів по продажу комп’ютерів: назва пристрою, параметри, вартість, № магазину. Визначити і вивести на екран № магазинів у яких вартості кожного виду комплектуючих комп’ютеру найменші.
1.4 Зміст звіту
Звіт повинен мати наступні пункти:
1.4.1 Тему, мету роботи
1.4.2 Завдання
1.4.3 Текст програми
1.4.4 Вхідний дані і результат роботи програми
При захисті лабораторних робіт враховується:
якість програми;
знання роботи програми;
знання матеріалу лекцій за темою.
1.5 Контрольні питання
1.5.1 Чим відрізняються декларативні мови програмування від алгоритмічних мов?
1.5.2 З яких секцій складається програма на Пролозі? Вкажіть їх призначення.
1.5.3 Які типи тверджень ви знаєте? В якій формі вони записуються?
1.5.4 Як Visual Prolog визначає чи відноситься факт до статичної бази даних або динамічної?
1.5.5 Які ви знаєте предикати роботи з динамічною базою даних?
1.5.6 Які є правила підготовки фактів для завантаження їх під час роботи програми?
1.5.7 Що таке механізм звороту?
1.5.8 Що відбувається зі змінними під час роботи механізму звороту?
1.5.9 Що таке анонімна змінна? Для чого вона використовується?
2 Лабораторна робота № 2 робота з рядками методом висхідної рекурсії
2.1 Мета роботи
Мета лабораторної роботи:
навчитися використовувати стандартні предикати роботи з рядками;
навчитися писати та налагоджувати програми, які оброблюють рядки методом висхідної рекурсії.
2.2 Методичні вказівки до виконання лабораторної роботи
2.2.1 Виконайте приклади, які подано нижче. Переконайтесь, що ви розумієте як працюють стандартні предикати роботи з рядками і як працює процедура, що написана висхідним методом рекурсії.
Приклад 1
Введіть з клавіатури рядок. Сформуйте новий рядок з першого та останнього символу рядку, який введено і виведіть новий рядок на екран.
Predicates
nondeterm Go (string, string)
Goal
Readln ( Str), go(Str, Str1),!.
Clauses
Go(Str,Str1):-str_len(Str,Len),Len<=1,Str1="",write("Довжина рядку< 2 ").
Go (Str, Str1):-subchar(Str,1, C), str_len(Str, L),
L1=L-1,frontstr(L1,Str,_,C1),
frontchar(Str1,C,C1).
Перший предикат subchar одержує 1ий символ введеного рядку і розміщує його в змінну С. Предикат str_len визначає довжину введеного рядку і розміщує її в змінну L. Предикат Frontstr відокремлює від рядку рядок, який містить останній символ і розміщує його в змінну С1. Предикат frontchar приєднує перший символ до рядку з останнім символом.
Зверніть увагу, що одержаний перший символ рядку типу char, а одержаний останній символ рядку типу string. Предикат frontchar працює на приєднання або відокремлення символу залежно від конкретизації змінних.
Зверніть увагу, що після виконання програми утиліта Test Goal повертає значення всіх змінних з секції Goal.
Приклад 2
Введіть з клавіатури рядок зі слів. Сформуйте новий рядок зі слів введеного рядку, які починаються на англійську букву „а” і виведіть новий рядок на екран.
Predicates
nondeterm Do_new (string, string, string)
Goal
Readln(St),concat(" ",St,Str), do_new(Str, "", Res),!.
Clauses
Do_new("", Str1, Str1):-write(Str1),nl.
Do_new(Str, Str1, Res):- fronttoken(Str,W,R),
frontchar(W, 'a', _),concat(Str1," ", Str2),
concat(Str2,W, Str3),!,do_new(R, Str3, Res);
fronttoken(Str,_,R), !,do_new(R, Str1, Res).
Вводиться рядок і до його початку приєднується пропуск. Новий рядок подається порожнім.
Правило має дві гілки.
По першій гілці оброблюються слова, що починаються з букви „а”. Перший предикат fronttoken відокремлює слово від рядку. Предикат frontchar перевіряє чи починається слово на букву „а”. Предикат concat приєднує слово, що починається на букву „а” в кінець рядку, що одержується. Після чого процедура Do_new викликається з залишком рядку і одержаним новим рядком.
По другій гілці оброблюються слова, що не починаються з букви „а”. Предикат fronttoken відокремлює слово від рядку. Після чого процедура Do_new викликається з залишком рядку і тим самим новим рядком.
Граничною умовою є факт, в якому рядок, що вводився, стає порожнім.
Зверніть увагу, що третій аргумент – змінна, яка залишається весь час вільною. Для привласнювання результату третьому аргументу, треба вказати для другого і третього аргументу факту однакові імена.
2.2.2 Виконайте завдання свого варіанту за № в журналі. Налагодьте вашу програму за допомогою трасування. Під час трасування переконайтесь, що ваша програма не має зайвих розв'язків або не виконує непотрібних дій. Використовуйте для цього відсік.