Розв’язування математичнихзадач за допомогою мови логічного програмування - Prolog
Автор работы: Пользователь скрыл имя, 22 Декабря 2014 в 13:39, курсовая работа
Краткое описание
Майже всі сучасні комп’ютери засновані на ранніх, розроблених у 40-х роках ідеях Фон Неймана та його колег. Машина Фон Неймана має більшу пам’ять і процесор, оснащений локальною пам’яттю і комірками, що називаються регістрами. Процесор може завантажувати дані з пам’яті в регістри, виконувати арифметичні та логічні операції над вмістом регістрів і надсилати значення регістрів на згадку. Програма машини Фон Неймана являє собою послідовність команд виконання перерахованих операцій разом з додатковою більшістю команд управління, які впливають на вибір наступної команди.
Содержание
Вступ…………………………………………………….…………………………4 Розділ І. Мова логічного програмування – Пролог.…………………………….7 Переваги і недоліки мови Пролог………………………………....7 Числення предикатів – математична основа Прологу…………….9 Порівняльна характеристика середовищ програмування Prolog..11 Структура пролог-програми………………………………………22 1.5 Синтаксис мови програмування Prolog………………………..….27 Висновки до І розділу…………………………………………………….30 Розділ ІІ. Розв’язування задач мовою Prolog………………………………….31 Розв’язування логічних задач……………………………..………32 Розв’язування математичних задач……………………………...35 Висновки до ІІ розділу………………………………………..………….37 Загальні висновки………………………………………………………………..39 Список використаних джерел…………
SWI - Prolog - це потужна середовище
розробки з набором графічних
інструментів ХРСЕ. Ядро системи ліцензовано
під GNU LGPL , бібліотеки - під GNU GPL з додатковим
умовою, що дозволяє використання в пропрієтарних
додатках. Розвиток SWI - Prolog почалося в
1987 р. , і сьогодні він широко використовується
в дослідницьких та освітніх цілях , а
також у комерційних додатках.
SWI Prolog - досить популярна
система , в основному завдяки зручній
середовищі і переносимої бібліотеці
для створення графічного інтерфейсу.
SWI - Prolog , як майже всі реалізації мови
, здебільшого реалізує Edinburgh Prolog , але
також містить окремі елементи ISO Prolog.
SWI - Prolog включає в себе
швидкий компілятор , профілювальник
, набір бібліотек і зручний інтерфейс
для підключення C - модулів. Він реалізований
для ряду UNIX -платформ , таких , як HP , IBM
Linux , для NeXT , OS / 2 , Sun і Sparc.
Prolog XREF
Логотип SWI – Prolog
ECLiPSe CLP
Реалізація мови програмування
Prolog.
ECLiPSe ( ECLiPSe Constraint Logic Programming System
) - заснована на Prolog система , інтегруюча
різні розширення логічної парадигми
програмування , особливо логічного програмування
з обмеженнями ( Constraint Logic Programming , CLP).
Ядро ECLiPSe є ефективною реалізацією
Edinburgh Prolog. В основі лежить інкрементальний
компілятор вихідних кодів в коди віртуальної
машини.
Система ECLiPSe написана на Prolog
і C.
TkECLiPSe - стандартна GUI- оболонка
для ECLiPSe , версія 6.0
EZY Prolog
Реалізація мови програмування
Prolog.
EZY Prolog - нове покоління
інтерпретаторів мови Prolog. Він повністю
був реалізований на Visual Prolog. EZY Prolog сумісний
з Visual Prolog і PDC / Turbo Prolog. Підтримує инкапсуляцию.
EZY Prolog не просто інтерпретатор
, вони має попередній компілятор , який
дає програмісту зручний інструмент для
перевірки , що програма є логічно несуперечливої
(контроль відповідності типів , аналіз
шаблонів , використання неініціалізованої
змінної , інтенсивний аналіз синтаксису
).
У EZY Prolog мається EZY Designer , який
дозволяє створювати складні графічні
інтерфейси користувача , зберігати його
в текстовий файл (XML) і завантажувати назад
при необхідності перегляду або обробки.
При цьому можна не писати код для обробки
графічного інтерфейсу - весь необхідний
код може бути згенерований автоматично.
Що особливо примітно , у міру
розвитку EZY Prolog , багато системних діалоги
були написані на EZY Prolog (включаючи весь
його інтерфейс).
EZY Prolog не створює виконувані
файли.
JIProlog
Реалізація мови програмування
Prolog.
JIProlog ( Java Internet Prolog ) - багатоплатформовий
інтерпретатор мови Prolog , який інтегрує
мови Prolog і Java дуже простим способом. JIProlog
дозволяє викликати предикати Prolog з Java
і дозволяє викликати методи Java їх Prolog.
JIProlog спроектований так , щоб він міг працювати
з будь-якою версією Java 1.1 і більш пізніми
версіями , що дозволяє інтегрувати Prolog
навіть з JME.
Qu - Prolog.
Реалізація мови програмування
Prolog.
Qu - Prolog - розширений Prolog розроблений
в першу чергу для автоматичного
доведення теорем. Має підтримку
символьних обчислень.
Qu - Prolog є багатопотоковий
і забезпечує зв'язок високого
рівня з потоками , процесами. Все
це створює сильний механізм для программирующего.
Відмінні особливості Qu - Prolog
:
• індексація динамічних баз
даних
• динамічний збирач сміття
для динамічних баз даних
• збирач сміття
• множинні потоки
• управління цілями
SICStus Prolog
Реалізація мови програмування
Prolog.
SICStus Prolog - це сучасна система
розробки програм підтримуюча
діалект ISO Prolog. SICStus Prolog реалізований на
високоефективному механізм, який може
використовувати повне віртуальний простір
пам'яті. SICStus Prolog ефективний і стійкий
для більшості реалізованих додатків.
Вікно програми на SICStus Prolog
Strawberry Prolog
Діалект мови програмування
Prolog.
Strawberry Prolog - діалект мови програмування
Prolog. Його синтаксис близький ISO Prolog , але
має безліч розширень , які не є частиною
стандарту. За своєю задумом Strawberry Prolog
повинен бути легким у використанні , тому
деякі університети використовують його
для курсів з Prolog.
Strawberry Prolog розробляється
інститутом математики та інформатики
болгарської академії наук. Перша
версія була випущена в 1996 році.
деякі розширення
• глобальні змінні
• масиви
• визначення функцій і вбудованих
предикатів
• CGI скрипти
• COM і ActiveX
• Strawberry Prolog як сервер OLE
• доступ до бази даних через
ODBC
Arity Prolog
Реалізація мови програмування
Prolog.
З комерційних реалізацій Прологу
треба згадати колишній один час вельми
популярним Arity Prolog. Система Arity / Prolog являє
собою засіб програмування універсального
призначення , яке може використовуватися
для створення прикладних систем усіх
типів. Пролог відрізняється від процедурних
мов не тим , що він робить , а тим як він
це робить.
Інтерпретатор
Пролог - програми можуть створюватися
за допомогою інтерпретатора. Розробка
програми при використанні інтерпретатора
є повністю інтерактивною. Працюючи в
інтерпретаторі , користувач , використовуючи
вбудований редактор системи Arity / Prolog
може редагувати одночасно до дев'яти
файлів , перемикатися за допомогою єдиної
клавіші від процесу редагування до прогону
програми. При роботі з інтерпретатором
відсутня необхідність реструктурувати
програму або здійснювати її рекомпіляції
та редагування зв'язків ( компоновку ).
Для того щоб запустити програму на виконання,
досить ввести у відповідь на запрошення
інтерпретатора відповідний запит.
Компілятор
Компілятор системи Arity / Prolog
дозволяє отримати більш швидкий і більш
ефективний код , ніж код вироблений інтерпретатором.
Компілятор виробляє на основі вихідного
коду Пролог - програми об'єктний код. Отримані
після компіляції об'єктні модулі потім
редагуються ( компонуються ) з модулями
з бібліотеки системи Arity / Prolog для отримання
виконуваного образу завдання. Компілятор
може використовуватися таким чином для
отримання високоефективного коду , який
може потім використовуватися з інтерпретатором
або як самостійної програмної одиниці.
Розробка програми починається частіше
в середовищі інтерпретатора , оскільки
він дозволяє виконувати , налагоджувати
і безперервно змінювати текст цієї програми.
Після того , як розробка окремих фрагментів
програми закінчена , вони можуть бути
відкомпільовані і вбудовані потім у інтерпретатор.
Таким чином , подальша розробка програми
може тривати вже з використанням цих
компільованих сегментів програми.
B- Prolog
Реалізація мови програмування
Prolog.
B- Prolog - універсальна і
ефективна система логічного
програмування , що розробляється Afany Software.
Система заснована на вдосконаленому
WAM , названим ATOAM , який полегшує програмну
емуляцію. На додаток до ATOAM зі складальником
сміття , написаним на C , система складається
з компілятора й інтерпретатора , написаних
вProlog , багатій бібліотеці вбудованих
предикатів , реалізованих в C і Prolog. B- Prolog
підтримує стандарт ISO Prolog , але володіє
власними особливостями , які не доступні
в традиційних системах.
Інтерактивне
середовище
B- Prolog має інтерактивну
середу , через яку користувач може переглядати
, компілювати , завантажувати , налагоджувати
і виконувати програми. Редактор команд
полегшує вибір і редагування раніше введених
команд.
Двонаправлений
інтерфейс з C або Java
B- Prolog має двонаправлений
інтерфейсу C і Java. Цей інтерфейс
дозволяє інтегрувати додатки
розробляються в B- Prolog до розробляються
в C , C + + , Java.
Правила
дії
B- Prolog пропонує користувачеві
унікальну конструкцію , названу правилами
дії , яка корисна при паралельному програмуванні
, реалізації обмежень , розробці інтерактивних
графічних інтерфейсів.
Механізм
табулювання
B- Prolog підтримує механізм
табулювання , який ефективний для таких
додатків як синтаксичний аналіз , рішення
задач , доведення теорем , перевірка моделі
, дедуктивні бази даних.
Логотип B- Prolog
GNU Prolog
Реалізація мови програмування
Prolog.
GNU Prolog - компілятор мови
Prolog , що поширюється за ліцензією GNU GPL.
Продуктивність GNU Prolog порівнянна з комерційними
компіляторами ( по швидкості зовсім небагато
поступається SICStus Prolog ).
Розробка GNU Prolog почалася в січні
1996 року під назвою Calypso. У березні 1999 року
Calypso ( beta 7 ) був перейменований в gprolog 0.9.0.
Особливості GNU Prolog
Мова
• відповідає стандарту ISO Prolog
( целочисленная / плаваюча арифметика
, потоки , динамічний код , виключення)
• безліч розширень ( глобальні
змінні , підтримка виразів DCG , підтримка
сокетів , інтерфейс операційної системи
)
• більше 300 вбудованих предикатів
• відладчик і низькорівневий
WAM відладчик
• можливість автозаповнення
атомів при редагуванні в інтерактивному
інтерпретаторі
• потужний двонаправлений
інтерфейс між Prolog і C
Компілятор
• компілятор генерує автономні
виконувані файли , які не потребують для
виконання окремої середовища
• простий компілятор з командного
рядка , що обробляє велику кількість файлів
: файли Prolog , C , WAM та інші
• пряма генерація машинного
коду в 15 разів швидше , ніж wamcc + gcc.
• більшість невикористовуваних
вбудованих предикатів НЕ лінкуются (щоб
зменшити розмір виконуваних файлів )
Підтримувані
платформи
• ix86 / GNU / Linux
• ix86 / Win32 використовує Cygwin
• ix86 / Win32 використовує MinGW
• ix86 / Win32 використовує MSVC +
+
• ix86 / SCO
• ix86 / Solaris
• ix86 / FreeBSD
• ix86 / OpenBSD
• ix86 / NetBSD
• ix86 / Darwin ( Mac OS X )
• x86_64 / GNU / Linux
• PowerPC / GNU / Linux
• PowerPC / Darwin ( Mac OS X )
• PowerPC / NetBSD
• sparc / SunOS ( 4.1.3 or higher )
• sparc / Solaris
• sparc / NetBSD
• alpha / GNU / Linux
• alpha / OSF1
• mips / irix
Visual Prolog
Реалізація мови програмування
Prolog.
Visual Prolog - продукт датської фірми
Prolog Development Center. Раніше поширювався під
назвою Turbo Prolog ( Borland ) і PDC Prolog.
Prolog Development Center витратив більше
трьох років на розробку системи Visual Prolog
з поетапним бета- тестуванням , поставки
комерційної версії якої почалися з лютого
1996 року. Visual Prolog є єдиною в світі Prolog -
системою з 100% оболонкою виконаної в ідеології
Visual -густо високорівневих компонент ,
які спрощують розробку програм для систем
Windows (версія 5.x підтримувала і платформу
OS2 ).
Visual Prolog автоматизує побудову
складних процедур і звільняє програміста
від виконання тривіальних операцій. За
допомогою Visual Prolog проектування користувальницького
інтерфейсу і пов'язаних з ним вікон , діалогів
, меню , рядка повідомлень про станах і
т.д. виробляється в графічному середовищі.
З створеними об'єктами відразу ж можуть
працювати різні Кодові Експерти ( Code Experts
), які використовуються для генерації
базового і розширеного кодів на мові
Prolog , необхідних для забезпечення їх функціонування.
Потужність мови Prolog в поєднанні
з сучасною системою користувальницьких
інтерфейсів ( GUI - Graphical User Interface ) робить
простий і інтуїтивно зрозумілою розробку
систем , заснованих на знаннях , систем
підтримай прийняття рішень , які планують
програм , розвинених систем управління
базами даних і т.д.
Visual - середовище
розробки
Середовище розробки додатків
системи Visual Prolog включає текстовий редактор
, різні редактори ресурсів , засоби розробки
Help систем в гіпертекстовому представленні
, систему відстеження змін , яка забезпечує
перекомпіляцію і перегенерація тільки
змінених ресурсів і модулів , ряд експертів
Коду , що оптимізує компілятор і набір
засобів перегляду різних типів інформації
про проект. Повна інтеграція всіх засобів
забезпечує підвищення швидкості розробки
додатків. Отримані додатки є виконуваними.
EXE програмами і не вимагають ніяких додаткових
оточення і ліцензування.
Сумісні
бібліотеки
Система програмування користувальницьких
інтерфейсів (до 6.x VPI - Visual Programming Interface
, починаючи з 7.x - об'єктно -орієнтована
GUI) системи Visual Prolog є високорівневою абстракцією
властивостей підтримуваних в базовій
віконній системі Windows ( в 5.x - також OS2 )..
У систему включений також інтерфейс
з базами даних типу SQL. Майже всі типи
баз даних доступні з використанням Windows
ODBC ( Open Database Connectivity ) інтерфейсу. Підтримуються
також звернення до баз даних Oracle , а в
платформі OS / 2 підтримано взаємодія з
системою управління базами даних DB / 2
Середовище розробки Visual Prolog
4.0
1.4. Структура пролог-програми
Як реалізуючу систему Прологу
будемо розглядати PDC Пролог. Його вибрано
тому, що, на противагу більшості реалізацій
Прологу, є компілятором.
Узагалі, програма PDC Прологу
(надалі будемо писати просто Пролог) складається
з 3-4 розділів.
Розділ clauses- головна частина
програми Прологу. Тут записуються факти
та правила, які будуть використані для
задоволення мети програми.
Розділ predicates використовується
для оголошення предикатів та доменів
і опису типів їх аргументів. Коли ви оголошуєте
предикат, то вказуєте Прологу, які домени
аргументів належать останньому. У ньому
повинні бути всі предикати, зазначені
в розділі clauses.
При застосуванні вмонтованих
предикатів, наприклад, таких, як write, makewindow,
nl тощо, оголошувати їх нема потреби.
Опис предикату починається
з імені, потім іде список типів аргументів
(якщо вони існують), розділених комами
та взятими в круглі дужки. Типи аргументу
є або стандартними доменами, або ж доменами,
які оголосили у розділі domains. Ім’я предикату
повинно бути ідентифікатором.
Розділ domains використовується
подібно до конструктора типів type у Паскалі.
За допомогою цього розділу можна перейменувати
/перевизначити/ стандартні домени й описати
такі складних типів даних. Якщо у програмі
використовуються тільки стандартні домени,
тоді в розділі domains узагалі нема потреби.
Розділом goal користуються для
задавання вмонтованих (внутрішніх) цілей
коли необхідно, щоб програма працювала
незалежно від розвитку середовища Прологу.
Іншими словами, якщо ви плануєте компілювати
програму в таку, яка самостійно виконуватиметься,
можете явно вказати мету виконання.
Розділ constants застосовують для
об’явлення констант. Вживають синтаксис:
<Ідентифікатор> = <Макровизначення>.
При цьому вводяться такі обмеження:
в одному рядку повинна бути
визначена лише одна константа;
заборонена рекурсія при визначенні
константи;
в описі констант система не
розпізнає великі та малі літери;
ідентифікатори констант є
глобальними і можуть бути об’явлені
тільки один раз.
Розділ database - це база даних.
Іноді під час виконання програми необхідно
змінити деякі факти, з якими працює програма.
Вони знаходяться в динамічній або внутрішній
базі даних. Факти, котрі розміщуються
в динамічній, повинні бути описані в розділі
database.
Пролог має декілька вмонтованих
стандартних доменів, основні з яких наведено
в додатку 1.
Можна скористатись стандартними
доменами під час опису типів аргументів
предикату. Їх не потрібно визначати в
розділі domains.