Розв’язування математичних задач за допомогою мови логічного програмування Prolog

Огляд переваг та недоліків мови Пролог, історія її створення. Числення предикатів як математична основа її функціонування. Порівняльна характеристика середовищ програмування Prolog. Алгоритми розв’язування математичних задач за допомогою цієї мови.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 23.12.2014
Размер файла 504,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Розв'язування математичних задач за допомогою мови логічного програмування Prolog

Вступ

мова програмування пролог

Майже всі сучасні комп'ютери засновані на ранніх, розроблених у 40-х роках ідеях Фон Неймана та його колег. Машина Фон Неймана має більшу пам'ять і процесор, оснащений локальною пам'яттю і комірками, що називаються регістрами. Процесор може завантажувати дані з пам'яті в регістри, виконувати арифметичні та логічні операції над вмістом регістрів і надсилати значення регістрів на згадку. Програма машини Фон Неймана являє собою послідовність команд виконання перерахованих операцій разом з додатковою більшістю команд управління, які впливають на вибір наступної команди. В міру подолання технічних проблем створення комп'ютерів накопичувалися проблеми пов'язані з їх використанням. Труднощі змістилися з області виконання програм комп'ютера в область створення програм для нього. Почалися пошуки мов програмування, які були зрозумілі людині. Починаючи з мови, яка сприймається комп'ютером (машинної мови), стали з'являтися більш зручні формалізми і системи позначень. І хоч ступінь абстракції мов зріс, починаючи з нібито асемблера і далі до Фортрана, Алгола, Паскаля і Ади,всі вони несуть друк машини з архітектурою Фон Неймана. Характерні особливості програмування на комп'ютерах Фон Неймана призводять до розподілу праці: є люди, які думають як вирішити задачу, і розробляють відповідні методи, а є люди-кодувальщики, які пишуть тексти програм, тобто виконують прозаїчну і стомлюючу роботу з перекладом інструкції розроблювачів у команди, які сприймаються комп'ютером.

У логіці, і в програмуванні потрібне явне вираження знань і методів у потрібному формалізмі. Явне формулювання яких-небудь відомостей є стомлюючою роботою. Але формалізація в логіці є часто інтелектуальною працею, оскільки при цьому задача стає більш зрозумілою. На відміну від цього формалізація задачі і метода її вирішення у вигляді набору інструкцій машини Фон Неймана рідко приводить до потрібного ефекту.

Джерела логіки пов'язані з дослідженнями наукової думки. Логіка є точною мовою для явного вираження цілей, знань і припущень. Логіка дає вираження цілей, знань і пропозицій. Логіка дозволяє виводити наслідки вихідних положень, а також виходячи зі знання про істинність або помилковість деяких тверджень, зробити висновок про істинність або помилковість інших тверджень. Логіка дозволяє обґрунтовувати несуперечність тверджень і перевіряти істинність наведених доводів.

На сьогоднішній день існує багато мов програмування, та їх варіантів, які використовуються як починаючими програмістами, так і професіоналами.

Програміст тільки повідомляє системі те, що йому відомо та задає питання. Його в більшій мірі цікавлять знання і в меншій - алгоритми, за допомогою яких з цих знань вилучається необхідна інформація. Саме цьому для програмування мовою Пролог необхідно свіже логічне мислення, при якому знання таких мов програмування як Паскаль або Бейсик може бути справжньою поміхою. До речі, назва мови ПРОЛОГ є скороченням «ПРОграмування мовою ЛОГіки».

Метою роботи є створення програм для моделювання математичних задач за допомогою мови логічного програмування Prolog

Завдання роботи:

1. Освоїти основи мови логічного програмування Prolog;

2. Дослідити середовища розробки Prolog;

3. Опрацювати літературні і інтернет джерела з теми;

4. Опрацювати відомості про мову логічного програмування Prolog;

5. За допомогою Prolog створити програмні засоби для моделювання математичних задач.

Основними методами дослідження є:

аналіз літературних джерел, в яких описуються засоби Prolog і його практичне застосування;

аналіз демонстраційних текстів програм на Prolog;

використання середовища розробки логічного програмування Prolog для аналізу і тестування програм.

І. Мова логічного програмування - Пролог

1.1 Переваги і недоліки мови Пролог

Перші повідомлення про Пролог з'явились на початку сімдесятих років. Він належить до класу логічних мов програмування, основні ідеї розробки яких запропонували Р. Ковальські та П. Хейс. Перший інтерпретатор Прологу був розроблений французами в Марселі під керівництвом А. Колмерое в 1973 р. Наступна версія, виконана Д. Уореном - Единбурзька реалізація Прологу на машині DEC-10, перевела цю мову і разом з нею логічне програмування з площини теоретичних досліджень у площину практичного програмування, зробила її корисним інструментом для розв'язання різних задач штучного інтелекту. Про великі можливості мови Пролог свідчить і той факт, що японські вчені обрали його як базову мову для створення обчислювальних систем п'ятого покоління.

Для Прологу характерним є той факт, що програміст повинен мислити в термінах цілей. Що під цим слід розуміти? Коли програмуємо, застосовуючи мову низького рівня, то повинні описувати, що треба зробити ЕОМ. Коли ж використовується мова програмування високого рівня, тоді необхідно вказати, що саме потрібно зробити. На відміну від традиційних мов, Пролог вимагає від програміста змінити форму мислення щодо написання програм. Прологівська програма являє собою набір визначень ситуацій і формулювань задач, замість того, щоб детально описувати варіанти розв'язків останніх. Основою Прологу є обмежений, але на диво потужний і гнучкий набір програмних механізмів, який включає в себе: співставлення зразків, задавання структур даних типу дерева й автоматичне повернення. Назва Пролог утворилась як скорочення від “програмування в термінах логіки” і його можна віднести до мов програмування, що будуються на описовому або ж декларативному підході до програмування.

Можна виділити два рівні характеристики Пролог-програми: декларативний і процедурний. Перший визначає за допомогою відношень, яким повинен бути результат роботи програми. Другий - як цей результат було отримано і які з відношень реально оброблялись. Пролог-системи значну частину процедурних деталей виконують самостійно без втручання програміста. Останній, таким чином, може більше уваги приділяти легшому декларативному аспекту програми, не відволікаючись на організацію процесу обчислень, якщо його не хвилює питання ефективності обчислень.

Попередньо Пролог належав до теоретичних мов програмування і більше використовувався як інструментарій у наукових дослідженнях. На це впливало й те, що довгий час вчені США не сприймали його переваг для розв'язання задач штучного інтелекту. Джон Малпас пояснює цей факт тим, що, по перше, серед учених США були сильними ліспівські традиції (мова ЛІСП створена в Массачусетському технологічному інституті) і, по друге, - попереднє знайомство з мовою логічного типу Мікропленнером було невдалим. Остання була реалізована дуже неефективно. Та зі створенням швидких інтерпретаторів і компіляторів Пролог зайняв почесне місце не тільки серед найбільш вживаних мов розв'язання задач штучного інтелекту, а й серед мов, які використовуються спеціалістами в реляційних базах даних, програмній інженерії, при задаванні знань, в експертних системах тощо.

Резюмуючи викладене раніше, можна виділити наступні переваги Прологу:

1. Ця мова має чітку математичну основу, близьку до людського мислення.

2. Використання єдиної мови специфікацій (числення предикатів) для опису вимог до програм і опису самої програми на Пролозі дозволяє поєднувати процес написання програми та її верифікацію.

3. Застосування відношення як базового поняття мови надає змогу зручно працювати з реляційними базами даних.

4. Паралельний принцип організації обчислень дозволяє просто й природно реалізовувати Пролог-програму на паралельному комплексі.

5. Пролог підтримує обчислення, які базуються на пошуці через зворотний ланцюжок міркувань, що забезпечує ефективність використання Прологу при побудові експертних систем.

6. Пролог може зберігати за допомогою “логічних змінних” проміжні результати обчислень для наступного використання. Це дозволяє природно вирішувати проблему організації логічного виведення.

Поряд з перевагами фахівці зазначають такі вади Прологу.

1. Складність розуміння процесу виконання програми на Пролозі, пов'язані з “не видимим” порядком побудови виведення результату програмою.

2. Недосконалі засоби для вияву екстра логічних властивостей (оператори динамічного приєднання та вилучення тверджень).

3. Відсутність досконалих засобів для розробки і налагодження великих програм.

4. Недостатні засоби підтримки модульного принципу програмування.

1.2 Числення предикатів - математична основа прологу

В основі Прологу лежить поняття відношення, яке взяте з предикатних логік. Слово “предикат” належить до розділу математичної логіки, в якому досліджуються операції над логічними висловленнями. У логіці предикатів під таким розуміється деяка властивість, логічна функція від довільного числа аргументів, що приймає тільки два значення - “істина” або ж “хибність”.

Логіку предикатів, деякою мірою, можна вважати спеціальним математичним апаратом формалізації людського мислення. Тому мови програмування логічного типу є найбільш зручними для роботи з базами знань.

Числення предикатів використовує такі основні елементи:

1) константні терми с12,...;

2) змінні терми х12,...;

3) функціональні терми f1,f2,...;

4) предикатні букви p1,p2,...;

5) логічні символи ,,,,,;

6) спеціальне висловлення .

Елементарне висловлення складається з предиката і зв'язаних з ним термів. Складні висловлення будуються з елементарних за допомогою логічних зв'язок. Серед них можна виділити логічні зв'язки: “і” (and, ), “або ж” (or,) , “ні” (not, ) та імплікація (). Остання посідає особливе місце, оскільки використовується для побудови специфічних правил і читається “якщо..., тоді...”.

Для того, щоб у численні предикатів можна було використовувати змінні терми, застосовується спеціальна структура - квантор.

Квантори використовуються для зазначення міри, в якій значення змінних повинні бути істинними для того, щоб у цілому висловлення стало істинним. Виділяють квантори узагальнення () та існування ().

У логіці предикатів елементарним об'єктом, що має значення “істина”, є атомарна формула. Вона включає в себе символьні позначення предиката і термів, які відіграють роль аргументів цього предиката. Загалом позначення предиката є ім'ям відношення, яке існує між аргументами.

Атомарна формула записується як позначення предикату і має вигляд Р(t1,t2,...,tn), де Р - позначення предиката, а t1,t2,...,tn- терми.

Число термів для кожного предиката фіксоване і називається його арністю. Терми визначаються наступним чином:

1) константний терм - терм;

2) змінний терм - терм;

3) якщо арність функціональної букви є n, а t1,t2,...,tn- терми, тоді f(t1,t2,...,tn) також терм.

Правильно побудована формула (ППФ) отримується внаслідок комбінування атомарних формул за допомогою логічних зв'язок.

Символ позначає хибну замкнуту формулу і визначає поняття “протиріччя”. Так, формула А означає хибність А і еквівалентна формулі А.

Серед формул можна виділити спеціальний клас - тотожно істинні формули, які називають аксіомами. Приклад аксіоми:

А А.

Більш детальний опис маніпулювання з формулами і правилами виведення можна знайти в будь-якому підручнику з математичної логіки.

1.3 Порівняльна характеристика середовищ програмування Prolog

Реалізацій мови Пролог існує надзвичайно багато. Ось повний перелік існуючих реалізацій на сьогоднішній день:

Arity Prolog

Arity/Prolog32

B- Prolog

B- Prolog 1.0

B- Prolog 1.2

B- Prolog 1.5

B- Prolog 1.6

B- Prolog 2.0

B- Prolog 2.1

B- Prolog 3.0

B- Prolog 3.1

B- Prolog 3.2

B- Prolog 4.0

B- Prolog 5.0

B- Prolog 5.0 - a

B- Prolog 5.0 - b

B- Prolog 6.0

B- Prolog 6.0 beta

B- Prolog 6.1

B- Prolog 6.2

B- Prolog 6.4

B- Prolog 6.5

B- Prolog 6.6

B- Prolog 6.7

B- Prolog 6.7-1

B- Prolog 6.7-3

B- Prolog 6.8

B- Prolog 6.9

B- Prolog 7.0

B- Prolog 7.1beta4

B- Prolog 7.4-3

BinProlog

Brain Aid Prolog

Ciao Prolog

CxProlog

ECLiPSe CLP

ECLiPSe CLP 6.0 # 188

EZY Prolog

EZY Prolog 1.0

EZY Prolog 1.01

EZY Prolog 2.0

EZY Prolog 2.1

EZY Prolog 3.0

EZY Prolog 4.0

EZY Prolog SUITE

EZY Prolog WYSIWYG

GNU Prolog

gprolog 1.3.0

gprolog 1.3.1

IF / Prolog

JIProlog

K- Prolog

MINERVA

Open Prolog

PDC / Turbo Prolog

PDC Prolog 3.31

Turbo Prolog 1.0

Turbo Prolog 2.0

Poplog ( Prolog )

Poplog 15.5 ( Prolog )

Qu - Prolog

SICStus Prolog

SWI - Prolog

swipl 5.6.x

Trinc - Prolog

R3B

Visual Prolog

Visual Prolog 4.0

Visual Prolog 5.0

Visual Prolog 5.1

Visual Prolog 7.2

YAP

Розглянемо основні з них.

SWI - Prolog

Реалізація мови програмування Prolog.

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.

Число аргументів предикату називається арністю предикату. Пролог допускає предикати з однаковою назвою, але різною арністю.

Пролог проводить автоматичне перетворення доменів:

1) між рядками і символами;

2) між цілим, символьним і дійсним доменом.

Як ми вже зазначали, синтаксис правила складається з трьох частин:

голова: - <підціль>, <підціль>, ... , <підціль>.

Кожна підціль викликає відповідний предикат Прологу. Пролог-система тестує викликаний предикат і перевіряє, чи може він задовольнитися. Якщо поточна підціль буде задоволена, тоді виклик справджується й обробка переходить до наступної підцілі. Коли обробка успішно досягла крапки, то кажуть, що правило істинне.

У разі, якщо якась із підцілей завершується невдачею, тоді Пролог-система повертається назад і переглядає альтернативи попередньо переглянутих підцілей, але з уже іншими значеннями параметрів. Цей процес називається бектрекінгом.

Ви можете включити в програму деякі директиви комп'ютера безпосередньо або ж зробити це, вибравши пункт меню Options /CompilerDirectives. Наприклад, директиву include. За її допомогою можна підключити до програми написані попередньо процедури. Додамо рядок include “my.pro” на початок програми. А у файлі my.pro описуються процедури, які використовуються у програмі розв'язку задачі. Якщо розглянутий шлях не дає відповіді, необхідно переглянути альтернативний. Такий підхід дістав назву бектрекінг.

Пролог реалізує бектрекінг таким чином: на початку пошуку розв'язання поставленої проблеми він ставить маркер на місце проглядання та вибирає першу підціль. Якщо її розв'язання завершиться невдачею, тоді Пролог повертається до точки, відміченої маркером і намагається знайти альтернативну підціль. При поверненні в точку бектрекінгу, він звільнює усі змінні, зв'язані після входу в дану точку.

Розглянемо програму:

domains

name, thing = symbol

predicates

likes(name, thing)

reads(name)

is_inquisitive(name)

clauses

likes(john, wine).

likes(lance, skiing).

likes(Z,books) :-reads(Z),

is_inquisitive(Z).

likes(lance, books).

likes(lance, films).

reads(john).

is_inquisitive(join).

Задамо системі запитання у вигляді мети, яка складається з двох підцілей:

likes(X,wine), likes(X,books)

Пролог починає виведення згідно з основним принципом бектрекінгу. Підцілі повинні задовольнятися послідовно зверху вниз.

Пролог визначає яка підціль буде використовуватись для задоволення відповідного фрагменту предикату згідно з другим принципом бектрекінгу. Фрагменти предикату розглядаються в тому порядку, в якому вони розміщені в програмі - послідовно зверху вниз.

Підціль likes(X, wine) відповідає факту likes(john, wine). Тому Х зв'язується з john. Потім Пролог робить спробу задовольнити наступну підціль справа. Виклик другої підцілі розпочинає новий пошук з Х = john. Перший пункт likes(john,wine) не відповідає підцілі likes(X,books), тому що wine не є тим же, що й books. Тому Пролог намагається підібрати наступний пункт. Подальший пошук визначається третім правилом бектрекінгу. Коли підціль відповідає голові, тоді наступним повинно задовольнятися тіло даного правила. Тіло правила у свою чергу створює нові підцілі, котрі повинні бути задоволені.

І нарешті, четвертий принцип бектрекінгу такий. Мету буде задоволено, коли будуть знайдені відповідні факти для кожного рівня дерева мети.

Бектерінг з внутрішньою метою ілюструється програмою:

predicates

type(symbol, symbol)

is_a(symbol, symbol)

lives(symbol, symbol)

can_swim(symbol)

goal

can_swim(What) ,

write("A ", What, " canswim.").

clauses

type(ungulate, animal).

type(fish, animal).

is_a(zebra, ungulate).

is_a(herring, fish).

is_a(shark,fish).

lives(zebra, on_land).

lives(frog, on_land).

lives(frog,in_water).

lives(shark, in_water).

can_swim(Y) :-

type(X, animal) ,

is_a(Y, X) , lives(Y,in_water).

1.5 Синтаксис мови програмування Prolog

Для кодування алгоритму мовою програмування необхідно знати синтаксис мови, тобто його основні оператори, типи змінних й ін. Команди й різні типи алгоритмічних структур реалізуються мовою програмування за допомогою операторів. Кожен оператор має свій формат.

У формат операторів, крім ключових слів, входять змінні й арифметичні вираження. Змінні бувають різних типів, тип змінної визначає, які значення може приймати ця змінна.

Команда - формат оператора;

Введення - даних INPUT< список змінних>;

Команда - PRINT<список змінних>;

Присвоювання - LET<змінна> = <арифметичне вираження>;

Команда розгалуження - IF <умова> THEN <оператори> ELSE <оператори>;

Команда циклу - <оператори>NEXT<змінна>;

Команда циклу - FOR<змінна>FROM<арифметичне вираження>TO<арифметичне вираження>.

Арифметичні вираження можуть містити в собі: числа, змінні, знаки арифметичних виражень, стандартні функції й круглі дужки.

Мова програмування характеризується властивими йому механізмами керування й обробки даних. Пролог як універсальну мову програмування можна розглядати й із цих точок зору. При успішному виконанні обчислення засобу керування програм мовою Пролог подібний до засобів керування у звичайних процедурних мовах. Звертання до деякої мети відповідає виклику процедури, порядок цілей у тілі правила відповідає послідовності операторів. Точніше, правило А В1,В2,…,Вn можна розглядати як визначення процедури:

Procedure A

Call B1

Call B2

CallBn

End.

Рекурсивний виклик мети в Пролозі в послідовності дій й у реалізації подібний тому ж виклику у звичайних рекурсивних мовах. Розходження виникає при реалізації повернення. У звичайних мовах, якщо обчислення не може бути продовжене (наприклад, всі галузі в операторі case помилкові), виникає помилка виконання. У Пролозі обчислення просто повертається до останнього вибору й робиться спроба продовжити обчислення новим чином.

Структури даних, якими оперують логічні програми, - терми - відповідають загальним структурам записів у звичайних мовах програмування. Пролог використовує дуже гнучку систему організації структур даних. Подібно мові Лісп, Пролог є без типовою мовою, що не містить оголошення даних.

Інші особливості використання структур даних у мові Пролог пов'язані із природою логічних змінних. Логічні змінні співвідносяться з об'єктами, а не з комірками пам'яті. Якщо змінній зіставлений конкретний об'єкт, то ця змінна вже ніколи не може посилатися на інший об'єкт. Іншими словами, логічне програмування не підтримує механізм деструктивного присвоювання, що дозволяє змінювати значення ініціалізованої змінної.

У логічному програмуванні обробка даних повністю укладена в алгоритмі уніфікації. В уніфікації реалізовані:

- однократне присвоювання,

- передача параметрів,

- розміщення записів,

- доступ до полів записів для одночасних читання/запису.

Традиційні мови, як правило, містять різного ступеня складності засоби обробки помилкових і виняткових ситуацій. Чистий Пролог не містить механізм обробки помилок і виняткових ситуацій, вбудованих в опис мови. На відміну від традиційних мов ситуації, що призводять до помилки (наприклад, відсутність потрібної галузі в операторі case, розподіл на нуль), у чистому Пролозі призводять до “відмови”.

Основна мета логічного програмування - створити можливість розробки програм мовою високого рівня. В ідеалі програміст повинен записати аксіоми, що визначають необхідніші відносини, повністю ігноруючи, яким образом ці аксіоми будуть використатися в процесі виконання. Наявні мови логічного програмування, і, зокрема Пролог, усе ще далекі від цього ідеалу декларативного програмування. Не можна ігнорувати конкретний, чітко певний спосіб моделювання абстрактного оператора в реалізації кожної мови. Ефективне логічне програмування вимагає знання й використання цього способу.

У практичному програмуванні на Пролозі необхідно звернути увагу на ефективність програм. Встановимо критерії оцінки програм. Основний оцінюваний параметр - число виконуваних уніфікацій і число спроб уніфікації в процесі обчислення. Цей параметр пов'язаний із часом роботи програми. Ще один параметр - глибина вкладеної рекурсії. Якщо в процесі обчислень глибина стане більш максимально припустимої, то обчислення перервуться. На практиці ця проблема є основною. Третій параметр - число породжених структур даних.

Можна припустити, що при розумному записі детермінованого послідовного алгоритму у вигляді програми на Пролозі очікувана ефективність алгоритму збережеться. Звичайно результуючі програми на Пролозі не ґрунтуються на уніфікація загального виду або глибоких повернень.

Складності можуть виникнути при реалізації алгоритмів, пов'язаних з істотною перебудовою структур даних, наприклад використовуючи дерева; при цьому витрати будуть зростати логарифмічно. Однак у багатьох випадках більш природно було б модифікувати сам алгоритм, пристосовуючи його до принципу однократного присвоювання, властивому логічним змінним.

ІІ. Розв'язування математичних задач мовою Prolog

Пролог - мова, що швидко розвивається. За останні роки з'явилося більше десятка його нових діалектів; розроблені об'єктні розширення Прологу, в якому є засоби для роботи з абстрактними типами даних. Виявилося, що на Пролозі можливе розв'язання задач з використанням підходів, далеких від математичної логіки, зокрема, функціонального і об'єктно-орієнтованого програмування.

Пролог, який відноситься до реляційних мов високого рівня, суттєво відрізняється від процедурних мов програмування (Бейсик, Паскаль, Фортран тощо) як за типами даних, так і за базовими конструкціями, та розрахований на ефективне розв'язання широкого кола задач певного класу, реалізація яких процедурними мовами значно ускладнюється. Але Пролог не є універсальною мовою програмування, тому існує ряд класів задач, для розв'язку яких використання Прологу є малоефективним. До таких задач слід віднести обчислювальні задачі: засоби виконання обчислювальних дій Прологу досить слабкі і носять переважно допоміжний характер.

Пролог придатний для задач, де головне значення мають складно структуровані нечислові дані, а також для задач, де важливу роль відіграє пошук розв'язку серед багатьох варіантів.

Процес розв'язання задачі мовою програмування Prolog проходить у декілька етапів:

1. Аналізуються дані умови задачі (або ще кажуть, предметна область): факти, функції, відношення. Вибираються позначення для них.

2. Описуються природною мовою з точки зору істинності відношення та функції.

3. Описані відношення оформлюються як аксіоми у вигляді фраз (фактів, правил), зрозумілих Прологу для роботи з ними. Множина таких фраз складає структуру предметної області. Програма вводиться у робоче поле компілятора.

4. Формулюються та виконуються запити до введеної програми, завдяки чому досягається результат розв'язку задачі.

2.1 Розв'язування логічних задач

Приклади деяких логічних задач мовою Prolog:

Приклад1.

Написати та реалізував програму встановлення родинних зв'язків: Василь має дочку Ольгу, у якої два сини Михайло і Максим. Використовувати зовнішні і внутрішні цілі.

domains

name = symbol

divdicates

men (name)

mama (name)

sons (name, name)

doughter (name, name)

deda (name, name)

brother (name, name).

goal

doughter (Z, Y),

write (Z, Y),

nl.

clauses

men ("Vaciliy").

men ("Michail").

men ("Maxim").

mama ("Olga").

sons ("Michail", "Olga").

sons ("Maxim", "Olga").

doughter ("Olga", "Vasiliy").

deda (X, Y): - men (X), men (Y), sons (X, Y), doughter (Z, Y).

brother (X, Y): - men (X), men (Y), sons (X, Z), sons (Y, Z), X <> Y.

Результат: Olga, Vaciliy

Приклад 2.Написати програму, що створює список міст. Виконати програму з різними внутрішніми і зовнішніми цілями.

domains

town_list = town

town = symbol

divdicates

towns (town_list)

goal

towns ([A, B, C, D, E]),

write (A ,",", B ,",", C ,",", D ,",", E).

clauses

towns (["Kazan", "Nignekamsk", "Elabuga", "Bugulma", "Almetevsk"]).

Результат: Kazan, Nignekamsk, Elabuga, Bugulma, Almetevsk

Приклад 3. Hello, World! - Prolog:

Visual Prolog створює проекти автоматично . Для запуску прикладу слід створити новий проект, вибравши "Console" як UIStrategy, перейти до редагування файлу main.pro і замінити його вміст наведеними кодом.

implement main

open core

constants

class Name = "main".

Class Version = "".

clauses

clas sInfo Cclass Name, class Version).

clauses

run():-

console::init(),

stdio::write("Hello, World!"),

program Control::sleep(1000),

succeed(). end implement main

goal

mainExe::run(main::run)

Приклад 4. Відомо те, що Петро та Ольга навчаються у десятому класі, Хома та Леся - у 9 класі. Один учень знає іншого, якщо вони вчаться в одному класі. Вважається, що певний учень не може знати сам себе.

domains

учень = symbol

клас = integer

predicates

вчиться (учень, клас)

знає (учень, клас)

clauses

вчиться (хома, 9).

вчиться (петро, 10).

вчиться (ольга, 10).

вчиться (леся, 9).

знає (X, Y) :-

вчится( Х, Клас),

вчиться (Y, Клас),

X<>Y.

Коментар: у програмі оголошуються предикати вчиться/2 і знає/2, аргументи учень типу «рядок символів» і клас типу «ціле число». Умова того, що учень Х навчається в одному і тому ж класі з учнем Y забезпечується однаковим іменем змінної у відповідних умовах правила.

2.2 Розв'язування математичних задач

Наведемо приклади математичних задач, алгоритми розв'язання яких ви знаєте:

* додавання двох багатоцифрових чисел;

* ділення відрізка навпіл за допомогою циркуля і лінійки;

* розв'язування квадратного рівняння тощо.

Розглянемо декілька прикладів розв'язування математичних задач мовою Prolog.

1. Числа Фібоначчі:

x Fibonacci.pl

:- dynamic(stored/1).

memo(Goal) ;-

stored(Goal) > true;

Goal, asserts(stored(Goal)).

fib(1,1) :- 1, write(`1, `).

fib(2,1) :- 1, write('1, `).

fib(N,F) :-

N1 is N-1, memo(fib(N1,F1)),

N2 is N-2, memo(fib(N2,F2)),

F is F1 + F2,

write(F), write(`, `).

x interactive

[-fibonacci].

fib(16,x), write(`…'), nl.

2. Факторіал:

Приклад для версій Poplog 15.5 (Prolog)

Цей приклад складається з двох частин - першу частину коду слід зберегти у файлі fact.pl, розташованому в робочому каталозі Poplog, а другу - ввести вручну в інтерактивному режимі.

[-fact]. завантажує базу фактів і правил з цього файлу в поточну сесію Poplog (і виводить повідомлення fact reconsulted, щоб позначити успішність завантаження). Запит fact (16, X). Намагається знайти значення X, при якому цей предикат буде оцінений як істинний. Висновок, що потребується у прикладі, буде побічним ефектом оцінювання запиту, а основним результатом буде X = 20922789888000?. Це означає, що якщо ви не задоволені такою прив'язкою змінних, ви можете відмовитися від неї (ввівши;), і буде продовжений пошук кращої прив'язки.

% fact.pt

fact(X, F) :-

( X=0, F-l;

Y is X-l, fact(Y, Z), F is X*Z),

write(X), write('! - '), write(F), nl.

% interactive

[-fact].

fact(16,X).

3. Квадратне рівняння:

Приклад для версій Prolog 1.3.0

read_integer - не стандартний предикат, а розширення GNU Prolog, тому цей приклад не буде працювати в інших реалізаціях.

q :- write('A = '),

read_integer(A),

( A = 0, write('Not a quadratic equation');

write('B = '),

read_integer(8),

write('C = '),

read_integer(C),

D is B*B-4*A*C,

( D = 0,write('x = '), X is -B/2/A, write(X);

D > 0, write('xl = '), XI is (-B+sqrt(D))/2/A, write(Xl), nl, write('x2=') x2 is( -B-sqrt(D))/2/A, write(X1), nl, write(`X2= `), X2 is B+sqrt(D))/2/A, write(X2);

R is -B/2/A, I is abs(sqrt(-D)/2/A),

write('xl = ('), write(R), write(', '), write(I), write(')'), nl,

write('xl = ('), write(R), write(', -'), write(I), write(')')

)

).

Варто зазначити, що за замовчуванням Пролог працює з припущенням про замкнутість світу (теорії, предметної області). Це означає наявність заперечення деякої фрази, якщо вона не представлена у програмі. Тобто, на довільний запит по перевірці істинності фрази дається повідомлення Yes або No. Альтернативою замкнутості є припущення про відкритість світу, за яким у разі відсутності деякої фрази у програмі вважається, що дана фраза не істинна і не хибна, тобто недоказова.

Назвемо деякі області, де використовується мова логічного програмування Пролог:

* створення динамічних реляційних баз даних;

* переклади з однієї мови на іншу;

* реалізація експертних систем і оболонок експертних систем;

* управління виробничими процесами;

* доведення теорем і пакети штучного інтелекту;

* розробка швидких прототипів прикладних програм;

Загальні висновки

Логічне програмування - це відносно новий перспективний напрямок сучасного програмування, що виник у рамках робіт зі створення штучного інтелекту. Свою назву логічне програмування одержало від математичної логіки і базується на одному з її розділів - логіці предикатів першого порядку.

Основна мета створення логічного програмування - підвищення "інтелектуальності" комп'ютерів. Однак роль логічного програмування цим не обмежується: крім усього іншого, воно було взято за концептуальну основу відомого японського проекту ЕОМ 5-го покоління. Мета даного проекту - створення систем обробки інформації, що базуються на знаннях і можуть давати експертні консультації користувачам. Відомо, що для того, щоб скласти програму розв'язку деякої задачі мовою процедурного типу, необхідно розробити її алгоритм і у подальшому транслювати його в набір базових конструкцій (цикли, розгалуження, процедури-підпрограми та ін.) за допомогою досить об'ємного набору операторів обраної мови. Відповідно до цього, програміст повинен спочатку продумати весь план розв'язку задачі, а потім деталізувати його до найменших подробиць. Крім того, процедурні мови, у своїй більшості, дозволяють оперувати тільки тими типами даних, які можуть зберігатися у пам'яті ЕОМ, і тільки тими операціями, які вона у змозі виконувати. Як правило, ці типи даних елементарні, операції над ними досить примітивні, тому складання навіть простої програми на мовах низького рівня (до яких відносяться процедурні) перетворюється у довгий копіткий процес і призводить до великої кількості помилок, пошук і виправлення яких часто вимагає навіть більше часу, ніж безпосереднє написання програми.

При використанні мови логічного програмування основна увага приділяється описанню структури прикладної задачі, а не розробці наказів комп'ютеру про те, що йому потрібно робити. Тут відсутнє традиційне поняття алгоритму розв'язку задачі. Для того, щоб розв'язати деяку задачу, необхідно досить детально описати дані умови задачі і, наприклад, шляхом запитів до програми одержати потрібні відповіді. При цьому програміст не вказує, "як" перевірити твердження, сформульоване у вигляді запиту, - програма сама або доведе істинність твердження, або повідомить про те, що твердження є хибним, або що про нього нічого не можна сказати на основі даних умов.

Тому логічне програмування вимагає іншого стилю мислення, відмови від прийнятих програмістських стереотипів: замість того, щоб задати складну послідовність команд, які б вказували машині на виконання тих чи інших дій для розв'язку задачі, необхідно описати її зміст у термінах об'єктів і відношень між ними. Отже, замість алгоритму розв'язку задачі програміст складає її логічну специфікацію. Для певної мови логічного програмування специфікація задачі (описання проблеми) розглядається як фактична програма. Зауважимо, що таким підходом до розв'язування задач визначається суть декларативного програмування.

Найбільш повно і строго ідеї логічного програмування реалізувались у мові програмування Пролог. Про це говорить і назва мови - ПРОграмування на основі ЛОГіки. Розробка мови Пролог, первісний варіант якої було створено А.Кольмерое у 1972 р. у Марсельському університеті, зробила логічне програмування практичним інструментом, доступним широкому загалу програмістів. Потрібно зазначити, що Пролог не єдина мова програмування, на якій можна писати програми з використанням концепцій логічного програмування.

Список використаних джерел

1. Братко И. Программирование на языке Пролог для искусственного интеллекта: Пер.с англ. - М.: Мир, 1990

2. Вивчення експертних систем у курсі основи інформатики і обчислювальної техніки: Методичні рекомендації/ Укл. Ю.С.Рамський, Н.Р. Балик.- 1С: УДПУ, 1995

3. В.Е. Хачатрян. Логическое програмированние. Белгород, 2000

4. Жалдак М.І., Рамський Ю.С. Інформатика: Навчальний посібник / За ред. М.І. Шкіля. - 1С: Вища школа, 1991.

5. У.Клоксин, К. Меллиш Программирование на языке Пролог.

6. О.М. Спірін. Початки Штучного інтелекту - Житомир: Видавництво ЖДУ, 2004. - 172 ст.

7. С.П. Хабаров Использование Турбо-Пролога при проектировании баз даных и знаний. Санкт-Петербург,2000.

8. Рамський Ю.С., Балик Н.Р. Методичні основи вивчення експертних систем у школі.- Київ: Логос, 1997.

9. Рамський Ю.С. Логічні основи інформатики. - Київ, 2003

10. Шрайнер П.А. Основы программирования на языке Пролог

Додатки

Додаток 1

Домен

Опис

char

integer

real

символ, узятий у одинарні лапки, цілі від -32768 до 32767 числа, з необов'язковим знаком + або - , який стоїть перед деяким числом DDDDDDD, потім необов'язкова десяткова крапка (.), що стоїть перед наступним числом DDDDDDD і необов'якова експоненційна частина (е(+ -)DDD):<+: ->DDDDD<.>DDDDDDD<e<+ : ->DDD>

Приклади дійсних чисел:

42705 9999 86.74

9111.769483 521е238 67.85е+21

діапазон чисел від 1е-307 до 1е+308. При необхідності цілі числа автоматично перетворюються в дійсні.

string

довільна послідовність символів, які взяті у подвійні лапки.

symbol

Існує два формати символів:

1) послідовність букв, чисел і підкреслень,що починаються з великої букви;

2) послідовність символів, які взяті у подвійні лапки (випадок, коли символ не починається з великої букви або ж коли містяться проміжки).

Размещено на Allbest.ru


Подобные документы

  • Методика та порядок програмування алгоритмів циклічної структури із заданим числом повторень за допомогою мови програмування VAB. Алгоритм роботи з одновимірними масивами. Програмування алгоритмів із структурою вкладених циклів, обробка матриць.

    курсовая работа [27,7 K], добавлен 03.04.2009

  • Початковий опорний план, перехід від одного до іншого. Оптимальний розв’язок, його головні критерії. Знаходження опорного плану задачі, складання симплексної таблиці. Приклад оформлення першої та другої таблиці для розв’язку задач лінійного програмування.

    лекция [479,7 K], добавлен 10.10.2013

  • Алгоритми розв’язання задач у вигляді блок–схем. Використання мови програмування MS VisualBasic for Application для написання програм у ході вирішення задач на одномірний, двовимірний масив, порядок розв’язання задачі на використання символьних величин.

    контрольная работа [742,9 K], добавлен 27.04.2010

  • Галузі застосування та принцип роботи мови програмування "Пролог". Керування процесом пошуку рішень, типи даних та використання списків. Рекурсивні процедури та цикли за допомогою пошуку з поверненням. Виконання арифметичних та логічних операцій.

    курс лекций [99,7 K], добавлен 06.07.2011

  • Лінійне програмування як один з найбільш популярних апаратів математичної теорії оптимального управління рішень. Опис існуючих методів розв’язку задач лінійного програмування. Завдання, основні принципи, алгоритми і головна мета лінійного програмування.

    курсовая работа [363,8 K], добавлен 03.12.2009

  • Механізм функціонування Visual Prolog, яка має предикати для безпосереднього доступу до операційної системи. Розгляд предикатів, які дозволяють звертатися до ОС, предикатів побітової обробки чисел та підтримки низькорівневого режиму роботи з пам'яттю.

    контрольная работа [21,4 K], добавлен 02.07.2011

  • Ключові поняття мови об’єктно-орієнтованого програмування C++: інкапсуляція, наслідування, абстракція, поліморфізм. Об’ява класів у мові С++. Графічні засоби. Пошук відстані між точками. Опис класів і об’єктів. Програма графічної задачі. Лістинги файлів.

    курсовая работа [144,3 K], добавлен 14.03.2013

  • Розв’язок багатокритеріальної задачі лінійного програмування з отриманням компромісного рішення (для задач з кількома функціями мети) за допомогою теоретико-ігрового підходу. Матриця мір неоптимальності та рядок функції мети. Модуль опису класу.

    курсовая работа [588,8 K], добавлен 15.05.2011

  • Вибір стратегії розв`язування задачі. Загальна характеристика середовища програмування Lazarus. Робота з текстовими файлами для збереження навчального матеріалу і результатів тестування. Авторизація викладача. Підпрограми редагування навчання та тестів.

    курсовая работа [1,6 M], добавлен 10.09.2012

  • Використання мови програмуванння Java при виконанні "задачі лінійного програмування": її лексична структура і типи даних. Методи розв’язання задачі. Особливості логічної структури програми, побудова її зручного інтерфейсу за допомогою симплекс методу.

    курсовая работа [437,9 K], добавлен 24.01.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.