Виконання даного циклу лабораторних робіт дозволить освоїти початковий етап програмування на мові Пролог і послужить поштовхом для подальшого більш глибокого самостійного вивчення мови.
Пролог орієнтований не на розробку рішень, а на систематичне і формалізований опис задачі з тим, щоб рішення випливало з цього опису. Свою назву Пролог отримав від слів «Програмування на мові логіки». Насправді Пролог не рахується чистою мовою логічного програмування, але його створення - важливий етап в цьому напрямку.
1. Структура програми і синтаксис мови пролог
Програма на Пролозі - це безліч аксіом і правил, які задають відносини між об'єктами. Обчисленням такої логічної програми є висновок наслідків з програми. Програма задає безліч наслідків, яке і являє собою значення програми. Основні конструкції логічного програмування терми і затвердження. Є три основних види тверджень: факти, правила і питання і єдина структура даних - логічний терм.
Факт - найпростіший вид затвердження, що використовується для констатації того, що виконано певний стосунок між об'єктами.
Цей факт стверджує, що Віра є дружиною Алекса. Інша назва для факту або відносини - «предикат». Імена індивідів в предикате - «атоми».
Другою формою утвердження в логічній програмі є питання. Питання - це засіб добування інформації з логічної програми. За допомогою питання з'ясовується, чи виконано певний стосунок між об'єктами. Синтаксичні питання і факти виглядають однаково, проте їх можна розрізнити за контекстом. Об'єкт, записаний в розділі goal або у вікні Dialog, називаетсяцелью. Просте запитання складається з однієї мети.
У Турбопрологе константи можуть мати числову або символьну форму. Число може бути цілим або дійсним: 0; -1; 123.4; 0.23Е-5. Константи, що є атомами є послідовність символів, укладених з двох сторін в подвійні лапки. При виведенні на друк ці подвійні лапки зазвичай не друкуються. Існують випадки, коли атоми не обов'язково брати в лапки:
атом, що складається тільки з чисел, букв і символу підкреслення і починаються з малої літери;
атом, що складається цілком із спеціальних символів. До спеціальних символів відноситься:
Як правило, в програмах на Пролозі використовуються атоми без лапок.
Атом, який необов'язково брати в лапки, може бути записаний і в лапках. Запис із зовнішніми лапками і без них визначає один і той же атом.
Поняття змінної в пролозі відрізняється від прийнятого в багатьох мовах програмування. Змінна не розглядається як виділена ділянка пам'яті. Вона служить для позначення об'єкта, на який не можна послатися на ім'я. Змінну можна вважати локальним ім'ям для деякого об'єкта.
Синтаксис змінної досить простий. Вона повинна починатися з великої літери або символу підкреслення і містити тільки символи букв, цифр і підкреслення.
Змінна, що складається тільки з символу підкреслення, називається анонімної і використовується в тому випадку, якщо ім'я змінної несуттєво.
Область дії змінних
Областю дії змінної є твердження. В межах затвердження одне і теж ім'я належить одній і тій же змінної. Два твердження можуть використовувати одне ім'я змінної зовсім по-різному. Правило визначення області дії змінної справедливо також у разі рекурсії і в тому випадку, коли кілька тверджень мають одну і ту ж головний мета. Це питання буде розглянуто в одній з наступних глав.
Єдиним винятком з правила визначення області дії змінних є анонімна змінна, наприклад, «_» в мети love (X, _). Кожна анонімна змінна є окрема сутність. Вона застосовується тоді, коли конкретне значення змінної несуттєво для даного твердження. Таким чином, кожна анонімна змінна чітко відрізняється від всіх інших анонімних змінних і тверджень.
Змінні, відмінні від анонімних, називаються іменованих. а неконкретизовані (змінні, яким не було присвоєно значення) називаютсясвободнимі.
Константи і змінні в Пролозі є термами.
Крім того, термами є складові терми або структури. Складовою терм містить функтор (званий головним функтором) і послідовність з одного або більше аргументів, які є термами. Функтор задається своїм ім'ям, яке суть атом, і своейарностью або числом аргументів. Синтаксично складові терми мають вигляд f (t1, t2, ..., tn), де f - ім'я n-арного функтора, а ti - аргументи. Приклади складових термів: s (0), parents (X, mary), list (a, list (b, nil)).
Предикат мети зіставляється з предикатами в програмі, так що мета завжди буде мати об'єкт. Цілі подібно фактами і правилами, будуються з предикатів і відповідно можуть мати зв'язки. Цілі, які мають зв'язки, називаються цілями мають подцели. Підцілі затвердження мети розділяються комами точно так же, як умови в правилах. Коли мета введена в програму на Турбо-Пролозі, то вся мета є успішною.