функціональне програмування
Суть функціонального (аплікативного) програмування визначена А. П. Єршовим як «. спосіб складання програм, в яких єдиним дією є виклик функції, єдиним способом розчленування програми на частини є введення імені для функції, а єдиним правилом композиції - оператор суперпозиції функції. Ніяких елементів пам'яті, ні операторів присвоювання, ні циклів, ні, тим більше, блок-схем, ні передачі управління ».
Роль основної конструкції в функціональних мовах грає вираз: До виразів належать скалярні константи, структуровані об'єкти, функції, тіла функцій і виклики функцій. Функція трактується як однозначне відображення з X в X, гдеX - безліч виразів.
Аплікативного мову програмування включає наступні елементи:
класи констант, якими можуть маніпулювати функції;
правила побудови нових функцій з базових;
правила формування виразів на основі викликів функцій.
Програма представляє собою сукупність описів функцій і вирази, які необхідно обчислити. Цей вираз обчислюється за допомогою редукції, тобто серії спрощень, до тих пір, поки це можливо за такими правилами: виклики базових функцій замінюються відповідними значеннями; дзвінки, крім базових функцій замінюються їх тілами, в яких параметри заміщені аргументами.
Функціональне програмування не використовує концепцію пам'яті як сховища значень змінних. Оператори присвоювання відсутні, внаслідок чого змінні позначають не області пам'яті, а об'єкти програми, що повністю відповідає поняттю змінної в математиці. В принципі, можна складати програми і взагалі без змінних. Крім того, немає суттєвої різниці між константами і функціями, тобто між програмами і даними. В результаті цього функція може бути значенням виклику іншої функції і може бути елементом структурованого об'єкта. Число аргументів при виклику функції не обов'язково має збігатися з числом параметрів, зазначених при її описі. Перераховані властивості характеризують аплікативного мови як мови програмування дуже високого рівня.
Першим таким мовою був LISP (Лісп) (LISt Processing - обробка списків), створений в 1959 році. Мета його створення полягала в організації зручності обробки символьної інформації. Суттєва риса цієї мови - уніфікація програмних структур і структур даних: всі вирази записуються у вигляді списків.
логічне програмування
Нову область - логічне, або реляційне програмування, - відкрило поява мови PROLOG (Пролог) (PROgramming in LOGic - програмування в термінах логіки). Ця мова була створена французьким вченим А. Кольмерое в 1973 році. В даний час відомі й інші мови, проте найбільш розвиненим і поширеним мовою логічного програмування є саме Пролог. Так, є понад 15 різних його реалізацій на ПЕОМ. Мови логічного програмування, особливо Пролог, широко використовуються в системах штучного інтелекту, що розглядаються в даному навчальному посібнику.
Центральним поняттям в логічному програмуванні являетсяотношеніе. Програма представляє собою сукупність визначень відносин між об'єктами (в термінах умов або обмежень) і мети (запиту). Процес виконання програми трактується як процес общезначимости логічної формули, построен- ної з програми за правилами, встановленими семантикою використовуваної мови. Результат обчислення є побічним продуктом цього процесу. У реляционном програмуванні потрібно тільки уточняти факти, на яких алгоритм грунтується, а не визначати послідовність кроків, які потрібно виконати. Це свідчить про декларативність мови логічного програмування. Вона влучно виражена у формулі Р. Ковальського: «алгоритм = логіка + управління». Мови логічного програмування характеризуються:
суворої орієнтацією на символьні обчислення;
можливістю інверсних обчислень, тобто змінні в процедурах не діляться на вхідні і вихідні;
можливої логічної неповнотою, оскільки часто неможливо висловити в програмі певні логічні співвідношення, а також неможливо отримати з програми все висновки правильні.
Логічні програми, в принципі, мають невелику швидкодію, так як обчислення здійснюються методом проб і помилок, пошуком з поверненнями до попередніх кроків.