
- •Лекція 3.2. Парадигми програмування
- •Діаграма рівня мов математичного запису.
- •Структурні,
- •Теорема про структурне програмування:
- •Людина лише формулює розв'язувану задачу, а пошуком рішення займається імперативна система.
- •Концепція функціонального програмування.
- •Програма на Прологу складається з предикатів. Програма на Прологу і база знань – синоніми. Мета формулюється також у вигляді предикатів. Виконання програми на Прологу – це резолюція мети.
- •Сучасний етап розвитку декларативних мов.
- •Інші напрямки досліджень в області декларативних мов в останнє десятиліття:
Теорема про структурне програмування:
Будь-яку схему алгоритму можна представити у вигляді композиції вкладених блоків begin і end, умовних операторів if, then, else, циклів із предумовою (while) і можливо додаткових логічних змінних (прапорів).
Правила зв'язку програмних модулів по керуванню:
Передача керування викликуваному модулю завжди здійснюється через його початок, тобто через перший оператор або команду.
По закінченні виконання викликуваного модуля керування передається у модуль, що викликав, на оператор, безпосередньо наступний за оператором виклику.
Модулі нижчих рівнів чи одного рівня ієрархії можуть викликатись для виконання лише модулями вищих рівнів, тобто модулі нижчих рівнів не можуть викликати модулі вищих рівнів, а модулі одного рівня - викликати один одного.
Для виконання модуля з деякої внутрішньої точки виклик здійснюється стандартним чином (через перший оператор), а точка початку задається параметром. При цьому на початку викликуваного модуля повинен стояти перемикач, що забезпечує передачу керування до внутрішніх точок входів по параметру, зазначеному у зверненні.
У будь-якому модулі повинна бути передбачена можливість підключення контрольних засобів і засобів налагодження; оператори, що реалізують ці засоби, звичайно зосереджують наприкінці модуля.
Правила зв'язку програмних модулів по інформації:
Інформація зон глобальних змінних доступна для використання будь-яким модулям із складу комплекса програм (КП) або групи програм згідно до області дії зони глобальних змінних. Тобто глобальні змінні можуть бути доступні не для всього КП, а лише для зазначеної в описі групи модулів.
Локальні змінні доступні лише в межах того модуля, у якому вони визначені або оголошені.
Для міжмодульної взаємодії створюються зони обмінних змінних, інформація з яких доступна лише модулям, безпосередньо зв'язаним по керуванню.
Для обміну інформацією між модулями забороняється користуватись регістрами й комірками пам'яті, використовуваними як регістри. Тобто по закінченню роботи викликуваного модуля вважається, що регістри не містять інформації щодо результату його роботи.
Інформація, наявна в регістрах модуля виклику, має бути збережена на період виконання викликуваного модуля і відновлена при поверненні у модуль виклику. Регістри можуть зберігати як модуль виклику, так і викликуваний модуль, однак прийнята угода повинна бути єдиною для всіх викликів модулів.
Принципи структурного програмування були реалізовані в мові Алгол, але найбільшу популярність завоювала мова Паскаль, створена в 1970 році швейцарським ученим Н. Віртом. Вона може вважатись зразковою мовою програмування, найбільш популярною і зараз (наприклад, у версії Delphi фірми Imprise).
Деякі позитивні якості структурного програмування:
Структурне програмування значно скорочує число варіантів побудови програми згідно специфікації, що значно знижує складність програми й, що ще важливіше, полегшує розуміння її іншими розроблювачами.
У структурованих програмах логічно зв'язані оператори перебувають візуально ближче, а слабко зв'язані — далі, що дозволяє обходитись без блок-схем і інших графічних форм зображення алгоритмів (по суті, сама програма є власною блок-схемою).
Сильно спрощується процес тестування і налагодження структурованих програм.
Як основний формалізм для представлення структур програм використовуються Бекусо-Наурови форми та розширені БНФ (РБНФ).
Опис структури в РБНФ є набір правил, що визначають відношення між терміналами і нетерміналами.
Термінали - елементи структури, що не мають власної структури. У РБНФ термінали - це або визначені поза РБНФ ідентифікатори (імена, що вважаються заданими для даного опису структури), або ланцюжки - послідовності символів у лапках або апострофах.
Нетермінали - елементи структури, що мають власні імена й структуру. Кожне ім'я є рядок символів, а структура визначається правилами, що фіксують його залежність від одного або більше терміналів й/або нетерміналів.
Правило в РБНФ має вигляд:
ідентифікатор = вираз.
де ідентифікатор - ім'я нетермінального символу, а вираз - комбінація терміналів і нетерміналів, об’єднаних спеціальними знаками синтаксису правил РБНФ. Крапка наприкінці - символ, що вказує на завершення правила.
Семантика правила РБНФ: нетермінал, заданий ідентифікатором ліворуч від знака "=", визначається деяким відношенням терміналів і нетерміналів.
Повний опис структури є набір правил, що визначають всі нетермінали так, що кожен нетермінал може бути зведений до комбінації терміналів шляхом послідовного (рекурсивного) застосування правил.
Набір можливих конструкцій РБНФ: конкатенація, альтернативний вибір, умовне входження й ітерація.
Конкатенація визначається послідовним записом символів виразу, що розділяються одним або більше пробільними символами. Правило виду A = B C. позначає, що нетермінал A складається із двох символів - B і C. Наприклад,
Присвоювання = Змінна ":=" Вираз.
- тут нетермінал Присвоювання визначений як конкатенація термів Змінна, ":=" і Вираз.
Альтернативний вибір позначається вертикальною рискою. Правило A = B|C|D. позначає, що нетермінал A може складатись або з B, або з C, або з D.
Умовне входження. Квадратні дужки виділяють необов'язковий елемент виразу. Правило A = [B]. позначає, що нетермінал A або є порожнім, або складається із символу B.
Ітерація. Фігурні дужки позначають конкатенацію будь-якого числа (включаючи нуль) записаних у ній елементів. Правило виду A = {B}. позначає, що A - або порожній, або є конкатенація деякого числа символів B.
Крім основних операцій, у РБНФ можуть використатися звичайні круглі дужки для групування елементів при формуванні складних виразів. Наприклад, правило A = (B|C)(D|E). позначає, що A складається із двох символів, першим з яких є або B, або C, другим - або D, або E, тобто A може бути одним з ланцюжків BD, BE, CD, CE.
Вочевидь, окремим випадком структурного програмування є атрибутні граматики, запропоновані Д. Кнутом для формального опису семантики мов програмування. Атрибутні трансляційні граматики є узагальненням КС-граматики за рахунок приєднання до синтаксичних правил граматики функцій, що обчислюють, так звані, "атрибути" вузлів дерева виводу й, тим самим, "значення" твердження КС-мови. Для цієї ж мети, у свій час, були розроблені й застосовувались і інші формальні системи такі, як W-Граматики, Віденська метамова. Атрибутні трансляційні граматики, як формалізм опису систем, використовують і зараз.
Задачі ШІ вимагають роботи з даними й знаннями у вигляді символьних структур. В обробці символьної інформації важлива не лише форма розглянутих знань, але і їх зміст і значення.
Причиною виникнення наприкінці 1950-х років програмних засобів символьної обробки є нездатність процедурних мов у вигляді чисел і масивів відображати природно об'єкти і ситуації дійсності. Цей недолік, зокрема, утруднював реалізацію евристичних методів, застосовуваних у розв'язку задач ШІ.
В основі ДЕКЛАРАТИВНИХ мов лежить формалізована людська логіка: