- •Міністерство освіти і науки,
- •Передмова
- •1 Лабораторна робота № 1 пошук з поверненням. Використання динамічної бази фактів
- •Мета роботи
- •Вказівки до виконання лабораторної роботи
- •Завдання до лабораторної роботи
- •Зміст звіту
- •Завдання до лабораторної роботи
- •Зміст звіту
- •Завдання до лабораторної роботи
- •Зміст звіту
- •Контрольні питання
- •Література
- •Додаток а Середовище Visual Prolog
- •Додаток б Стандартні предикати
Додаток б Стандартні предикати
Всі стандартні предикати виконують основну дію і повертають істину, або повертають лжу і дію не виконують. У розділі подано у короткій формі предикати, що часто вживаються. Для детального знайомства дивись конспект лекцій та довідку Visual Prolog.
Б.1 Стандартні предикати роботи з динамічною базою даних
Всі стандартні предикати розділу Б.1 можуть мати один аргумент(ім’я файлу), якщо факти описуються в неіменованій секції Facts або два аргументи(ім’я файлу та ім’я іменованої секції), якщо факти описуються в іменованої секції Facts-ім’я.
Consult (“Ім'я_файлу”, Ім'я_Facts) - завантажує факти з файлу,
(string, symbol) що описані в іменованій секції.
Consult (“Ім'я_файлу”) - завантажує факти з файлу, що описані в неіменованій секції.
Assertz (факт, Ім'я_Facts) вставляє факт в кінець динамічної БД.
Assert (факт, Ім'я_Facts) вставляє факт в кінець динамічної БД.
Asserta (факт, Ім'я_Facts) вставляє факт в початок БД.
retract (факт) – вилучає перший факт із вказаним предикатом і вказаними значеннями його аргументів.
retractall (факт, Ім'я_Facts) – вилучає усі факти з динамічної бази даних із вказаним предикатом і значеннями його аргументів.
save(“Ім'я_файлу”, Ім'я_Facts) – зберігає факти у файлі.
Б.2 Стандартні предикати роботи з рядками
Предикат Frontchar (Рядок, Символ, Залишок)
(string, char, string)
Працює з першим символом рядку. Режими роботи предиката
залежать від конкретизації змінних(і змінну треба конкретизувати, змінна вільна для результату):
(і, o, o) поділяє рядок на перший символ і його залишок;
(o, i, i) приєднує символ до початку рядка;
(і, і, o) перевіряє, чи починається рядок із вказаного символу;
(і, o, і) перевіряє, чи дорівнює залишок рядка після відділення першого символу, зазначеному;
(i, i, i) перевіряє, чи складається рядок з вказаних частин.
Предикат Fronttoken (Рядок, Лексема, Залишок)
(string, string, string)
Предикат працює з першою лексемою(словом) рядку. Режими роботи предиката залежать від конкретизації змінних:
(і, o, o).розділяє рядок на перше слово і його залишок;
(o, і, і,).приєднує слово до початку рядка;
(і, і, o) перевіряє, чи починається рядок із зазначеної лексеми;
(і, o, і) перевіряє, чи дорівнює залишок рядка зазначеному;
(і, і, і) перевіряє, чи дорівнює рядок зазначеним частинам, де частини – перша лексема рядка і залишок.
Предикат Frontstr (Кількість символів, Рядок, Рядок1, Рядок2)
(integer, string, string, string):
( і, і, о, о) предикат відокремлює зазначену кількість символів від початку рядка.
Предикат Concat (Str1, Str2, Str)
(string, string, string):
(і, і, o) рядки з'єднуються за принципом Str1+Str2 = Str;
(і, o, і) виділяється маскою(рядком) початок іншого рядку;
(o, і, і) виділяється маскою кінець рядк;
(i, i, i,) перевіряє, чи складається рядок із зазначених частин.
Предикат Str_len (Рядок, Довжина)
(string, integer)
Предикат працює в 3х режимах:
(і, o) предикат знаходить довжину рядка;
(і, і) порівнює, чи дорівнює довжина рядка вказаній;
(о, і) предикат формує рядок із пропусків зазначеної довжини.
Предикат subchar (Рядок, Позиція, Символ)
(string, integer, char)
(і, і, о) одержує символ рядку за позицією, яка рахується з 1.
Предикат substring (Рядок, Позиція, Довжина, Підрядок)
(string, integer, integer, string)
(і, і, і, о) одержує з рядку підрядок за номером початку підрядку і його довжиною.
Предикат searchchar (Рядок, Символ, Позиція)
(string, char, integer)
(і, і, о) шукає символ в рядку і повертає позицію першого знайденого символу.
Предикат searchstring (Рядок, Підрядок, Позиція)
(string, string, integer)
(і, і, о) шукає підрядок в рядку і повертає позицію першого знайденого підрядку.
Предикат str_char (Рядок, Символ)
(string, char)
Предикат працює в таких режимах роботи:
(i, o) перетворює рядок з одного символу типу string в символ типу char;
(o, i) перетворює символ типу char в рядок з одного символу типу string;
(і, і) порівнює рядок з одного символу типу string і один символ типу char.
Предикат str_int (Рядок, Ціле число)
(string, integer)
Предикат працює в таких режимах роботи:
(i, o) – перетворює рядок типу string в ціле число;
(o, i) - перетворює ціле число в рядок типу string;
(i, i) - порівнює ціле число з його текстовим подаванням типу string
Предикат char_int (Символ, Код символу)
(char, integer)
Предикат працює в таких режимах роботи:
(i, o) – перетворює символ в код символу;
(o, i) - перетворює код символу в символ;
(і, i) - порівнює код символу з символом.
Б.3 Основна операція на списках
Основна операція на списку L=[H|T] працює залежно від конкретизації змінних в різних режимах. При конкретизації змінних, яка не вказана в таблиці компілятор виявляє помилку.
L = [ H | T ]
( i, o, o ) розділяється список L, якщо він не порожній, на перший елемент Н і хвіст списку Т, повертає true. Для порожнього списку повертає fail.
( o, i, i ) приєднує елемент Н до початку списку Т і привласнює змінній L.
( i, i, o ) порівнюються 1-ий елемент списку L з вказаним Н. Якщо порівняння вірне, то змінна Т конкретизується хвостом списку.
( i, o, i ) порівнюються хвіст списку L з вказаним списком T. Якщо порівняння вірне, вільна змінна Н конкретизується першим елементом списку.
( i, i, i ) перевіряється, чи складається список L з вказаних частин H i T. Повертається true або fail.