Проло́г (фр. Prolog, англ. Prolog) — мова логічного програмування загального призначення, пов'язана зі штучним інтелектом та математичною лінгвістикою.
Prolog | |
---|---|
Парадигма | логічне програмування |
Дата появи | 1972 |
Творці | d, Роберт Ковальський і d |
Розробник | [en] |
Основні реалізації | [en], [en], [en], [en], Jekejeke Prolog, [en], Пролог [en], , Quintus, SICStus, , SWI-Prolog, , XSB, [en] |
Діалекти | Пролог ISO, Единбурзька Пролог |
Під впливом від | Planner |
Вплинула на | [en], [en], [en], Erlang, [en], [en], [en], Datalog, [en], XSB |
Звичайні розширення файлів | . |
|
Пролог має корені в логіці першого порядку, математичній логіці, та, на відміну від багатьох інших мов програмування, є декларативною: логіка програми виражається в термінах відношень, представлених як факти та правила. Обчислення ініціюється запуском запиту над цими відношеннями.
Цю мову програмування спочатку було задумано групою навколо [en] в Марселі на початку 1970-х, а першу систему Пролог було розроблено в 1972-му Аланом Кольмерое та [fr].
Пролог була однією з перших логічних мов програмування, й залишається найпопулярнішою серед таких мов і на сьогодні, маючи декілька безкоштовних та комерційних реалізацій. Її застосовували як для доведення теорем, експертних систем, так і для її початкової області призначення, обробки природної мови. Сучасні середовища Прологу підтримують як створення графічних інтерфейсів користувача, так і адміністративні або мережеві застосування.
Пролог добре підходить для розв'язання специфічних задач, що виграю́ть від логічних запитів на базі правил, таких як пошук базами даних, системи голосового керування та заповнення шаблонів.
Синтаксис та семантика
Програмна логіка у Пролозі виражається в термінах відношень, а обчислення ініціюється запуском запиту над цими відношеннями. Відношення та запити створюються з використанням єдиного типу даних Прологу, терму. Відношення виражаються твердженнями. Отримавши запит, рушій Прологу намагається знайти спростування резолюції заперечення запиту. Якщо заперечення запиту може бути спростовано, тобто, знайдено конкретизацію всіх вільних змінних, що робить об'єднання атомарних формул та множини-синґлетону, що складається із заперечення запиту, хибним, то з цього випливає, що початковий запит, із застосуванням знайденої конкретизації, є логічним висновком програми. Це робить Пролог (та інші логічні мови програмування) надзвичайно зручною для застосування в базах даних, символьній математиці та граматичному аналізі мов. Оскільки Пролог дозволяє нечисті предикати, перевірка істинності певних спеціальних предикатів може мати деякий навмисний побічний ефект, як-то виведення значення на екран. Через це програмістові дозволено певною мірою використовувати звичайне імперативне програмування, коли логічна парадигма є незручною. Пролог має як чисту логічну підмножину, що називається «чиста Пролог», так і ряд позалогічних властивостей.
Типи даних
Єдиним типом даних Прологу є терм. Терми можуть бути атомами, числами, змінними або складеними термами.
- Атом — це загальна назва без притаманного значення. Прикладами атомів є
x
,синій
,'Пиріжок'
та'якийсь атом'
. - Числа можуть бути з рухомою комою, або цілими.
- Змінні позначаються стрічками, що складаються з літер, цифр та символів підкреслення, і починаються з великої літери або символу підкреслення. Змінні дуже подібні до змінних в логіці тим, що вони є позначками-заповнювачами для довільних термів.
- Складений терм складається з атому, що зветься функтор, та певної кількості аргументів, що в свою чергу теж є термами. Складені терми зазвичай записуються у вигляді функтора, за яким у дужках слідує перелік термів-аргументів через кому. Кількість аргументів називається арністю терму. Атом може розглядатися як складений терм нульової арності.
рік_машини('Таврія', 1988)
та'Друзі_Особи'(грай,[око,тур])
є прикладами складених термів.
Особливі випадки складених термів:
- Список є впорядкованою колекцією термів. Він позначається квадратними дужками з термами, розділеними комами, або, у випадку порожнього списку,
[]
. Наприклад,[1,2,3]
, або[червоний,зелений,синій]
. - Стрічки: послідовність символів у лапках, еквівалентна спискові (числових) кодів символів, зазвичай у місцевому кодуванні, або в Юнікоді, якщо система підтримує Юнікод. Наприклад,
"бути чи не бути"
.
Правила та факти
Прологові програми описують відношення, визначені твердженнями. Чиста Пролог обмежена диз'юнктами Горна. Є два типи тверджень: факти та правила. Правило має вигляд
Голова :- Тіло.
і читається як «голова істинна, якщо тіло істинне». Тіло правила складається з викликів предикатів, що називаються цілями правила. Вбудований предикат ,/2
(що значить двоарний оператор з ім'ям ,
) позначає кон'юнкцію цілей, а ;/2
— диз'юнкцію. Кон'юнкції та диз'юнкції можуть бути присутні лише в тілі, але не в голові правила.
Твердження з порожніми тілами називаються фактами. Наприклад:
кіт(базиліо).
що рівноцінне правилу:
кіт(базиліо) :- true.
Вбудований предикат true/0
є завжди істинним.
Маючи наведений вище факт, можна спитати:
чи є базиліо котом?
?- кіт(базиліо). Yes
що є котами?
?- кіт(X). X = базиліо
Твердження з тілами називаються правилами. Наприклад:
тварина(X):- кіт(X).
Якщо ми додамо це правило та спитаємо, що є тваринами?
?- тварина(X). X = базиліо
Оскільки природа багатьох вбудованих предикатів є відносною, їх зазвичай можна використовувати в кількох напрямках. Наприклад, length/2
може використовуватися як для визначення довжини списку (length(List, L)
, коли задано список List
), так і для створення кістяка списку заданої довжини (length(X, 5)
), а також і для створення кістяків списків та їх довжин одночасно (length(X, L)
). Так само, append/3
може використовуватися як для з'єднання двох списків (append(ListA, ListB, X)
коли задано списки ListA
та ListB
), так і для розділення заданого списку на частини (append(X, Y, List)
, коли задано список List
). Тому відносно невеликий набір бібліотечних предикатів є достатнім для великої кількості прологових програм.
Як мова загального призначення, Пролог також пропонує різноманітні вбудовані предикати для виконання всякої поточної діяльності, як-то (введення/виведення), використання графіки, та іншої взаємодії з операційною системою. Ці предикати не мають значення відношень, і корисні лише для побічних ефектів, що вони спричиняють у системі. Наприклад, предикат write/1
відображає терм на екрані.
Виконання
Виконання прологової програми починається задаванням користувачем єдиної цілі, що зветься запитом. З точки зору логіки, рушій Прологу намагається знайти спростування резолюції заперечення цього запиту. Метод резолюції, що використовується у Пролозі, називається ВЛВ-резолюцією. Якщо заперечення запиту може бути спростовано, з цього випливає, що запит, з відповідними зв'язуваннями змінних, є логічним висновком програми. У такому разі всі створені зв'язування змінних повідомляються користувачеві, і про запит повідомляється, що він досяг успіху. З практичної точки зору, стратегію виконання Прологу можна уявити як узагальнення викликів функцій в інших мовах, з тією різницею, що заданому запитові можуть відповідати голови кількох тверджень. В такому випадку система створює точку вибору, об'єднує ціль з головою твердження першої альтернативи, і продовжує цілями цієї першої альтернативи. Якщо в напрямку виконання програми будь-яка ціль зазнає невдачі, всі зв'язування змінних, що було зроблено від останньої на той момент точки вибору, скасовуються, і виконання продовжується з наступною альтернативою цієї точки вибору. Ця стратегія виконання називається хронологічним пошуком з вертанням. Наприклад:
мати_дитини(ірина, святослав). батько_дитини(ярослав, святослав). батько_дитини(ярослав, анна). батько_дитини(володимир, ярослав). брат_або_сестра(X, Y) :- батько_або_мати_дитини(Z, X), батько_або_мати_дитини(Z, Y). батько_або_мати_дитини(X, Y) :- батько_дитини(X, Y). батько_або_мати_дитини(X, Y) :- мати_дитини(X, Y).
Виходячи з цього, наступний запит оцінюється як істинний:
?- брат_або_сестра(святослав, анна). Yes
Це отримується таким чином: Спочатку єдиною відповідною головою твердження до запиту брат_або_сестра(святослав, анна)
є перша, тому надавання запиту є рівноцінним надаванню тіла того твердження з відповідними зв'язуваннями змінних, тобто, кон'юнкція (батько_або_мати_дитини(Z,святослав), батько_або_мати_дитини(Z,анна))
. Наступною ціллю для доведення є крайня зліва з цієї кон'юнкції, тобто, батько_або_мати_дитини(Z,святослав)
. Цій цілі відповідають голови двох правил. Система створює точку вибору, і пробує перший вибір, чиїм тілом є батько_дитини(Z, святослав)
. Цю ціль може бути доведено з використанням факту батько_дитини(ярослав, святослав)
, тому створюється зв'язування Z = ярослав
, і наступною ціллю для доведення стає друга частина наведеної вище кон'юнкції: батько_або_мати_дитини(ярослав, анна)
. І знову, це може бути доведено відповідним фактом. Оскільки всі цілі доведено, запит досягає успіху. Оскільки запит не містить жодних змінних, користувачеві не повідомляються жодні зв'язування. Запит зі змінними, як-то:
?- батько_дитини(Батько, Дитина).
перелічує всі дійсні відповіді пошуку з вертанням.
Зверніть увагу, що з наведеним вище кодом запит ?- брат_або_сестра(святослав, святослав).
також досягає успіху. Якщо потрібно, можна додати додаткові цілі для опису відповідних обмежень.
Цикли та рекурсія
Ітеративні алгоритми може бути реалізовано засобами рекурсивних предикатів.
Заперечення
Вбудований предикат Прологу \+/1
забезпечує заперечення як відмову, що уможливлює немонотонну аргументацію. Ціль \+ нелегальне(X)
у правилі
легальне(X) :- \+ нелегальне(X).
обчислюється таким чином. Пролог намагається довести нелегальне(X)
. Якщо доведення цієї цілі знайдено, то початкова ціль (тобто, \+ нелегальне(X)
) зазнає невдачі. Якщо доведення не може бути знайдено, то початкова ціль досягає успіху. Отже, префіксний оператор \+/1
називається оператором «недовідне», оскільки запит ?- \+ Ціль.
досягає успіху, якщо Ціль не є довідною. Цей вид заперечення є правильним, якщо його аргумент є замкненим (тобто, не містить змінних). Правильність втрачається, якщо аргумент містить змінні, і процедура доведення є повною. Зокрема, запит ?- легальне(X).
тепер вже не може бути використано для перелічення усіх речей, що є легальними.
Програмування мовою Пролог
У Пролозі завантаження коду називається взяттям до уваги. Пролог може використовуватися інтерактивно шляхом введення запитів до підказки Прологу, ?-
. Якщо розв'язку не існує, то Пролог пише no
. Якщо розв'язок існує, то тоді друкується він. Якщо існує декілька розв'язків запиту, то їх може бути запитано введенням крапки з комою, ;
. Існують керівні принципи з належної практики програмування для покращення ефективності, читабельності та підтримуваності коду.
Далі слідують деякі приклади програм, написаних мовою Пролог.
"Hello, world!"
Приклад запиту:
?- write('Привіт, світе!'), nl. Привіт, світе! true. ?-
Оптимізація компілятором
Будь-яке обчислення може бути виражено декларативно як послідовність переходу станів. Як приклад, оптимізувальний компілятор з трьома проходами оптимізації може бути реалізовано як відношення між початковою програмою та її оптимізованою формою:
програма_оптимізована(Прог0, Прог) :- оптимізація_прохід_1(Прог0, Прог1), оптимізація_прохід_2(Прог1, Прог2), оптимізація_прохід_3(Прог2, Прог).
або рівнозначно з використанням запису граматики визначених тверджень:
програма_оптимізована --> оптимізація_прохід_1, оптимізація_прохід_2, оптимізація_прохід_3.
Швидке сортування
Алгоритм швидкого сортування, що ставить у відповідність спискові його відсортовану версію:
розділення([], _, [], []). розділення([X|Xs], Опорне, Малі, Великі) :- ( X @< Опорне -> Малі = [X|Решта], розділення(Xs, Опорне, Решта, Великі) ; Великі = [X|Решта], розділення(Xs, Опорне, Малі, Решта) ). швидке_сортування([]) --> []. швидке_сортування([X|Xs]) --> { розділення(Xs, X, Менші, Більші) }, швидке_сортування(Менші), [X], швидке_сортування(Більші).
Шаблони проектування
Шаблон проектування це загальне рішення багаторазового використання поширеної проблеми у проектуванні програмного забезпечення. У Пролозі шаблони проектування можуть носити різні назви: кістяки та техніки, кліше, програмні схеми та схеми опису логіки. Альтернативою до шаблонів проектування є програмування вищих порядків.
Програмування вищих порядків
Детальніші відомості з цієї теми ви можете знайти в статті [en] та Програмування вищих порядків.
Предикат вищого порядку — це предикат, що має один або більше інших предикатів як аргументи. Хоча підтримка програмування вищих порядків і виводить Пролог з області логіки першого порядку, яка не дозволяє квантифікації предикатів, Пролог ISO вже має деякі вбудовані предикати вищих порядків, такі як call/1
, call/2
, call/3
, findall/3
, setof/3
та bagof/3
. Крім того, оскільки довільні цілі Прологу можуть створюватись та оцінюватись у реальному часі, нескладно писати предикати вищих порядків на кшталт maplist/2
, що застосовує довільний предикат до кожного елемента наданого списку, та sublist/3
, що відфільтровує елементи, які задовольняють наданому предикатові, уможливлюючи також і каррування.
Для перетворення рішень з часового представлення (підстановки відповідей при зворотному пошуку) до просторового представлення (термів) Пролог має різноманітні предикати для всіх рішень, що збирають всі підстановки відповідей для заданого запиту до списку. Це може використовуватися у спискових виразах. Наприклад, досконалі числа дорівнюють сумі своїх дільників:
perfect(N) :- between(1, inf, N), U is N // 2, findall(D, (between(1,U,D), N mod D =:= 0), Ds), sumlist(Ds, N).
Це може бути використано для перелічування досконалих чисел, а також для перевірки, чи є число досконалим.
Як інший приклад, предикат maplist
застосовує предикат P
до всіх відповідних положень у парі списків:
maplist(_, [], []). maplist(P, [X|Xs], [Y|Ys]) :- call(P, X, Y), maplist(P, Xs, Ys).
Коли P
є таким предикатом, що для кожного X
P(X,Y)
об'єднує Y
з єдиним унікальним значенням, maplist(P, Xs, Ys)
є еквівалентом застосування функції map у функційному програмуванні як Ys = map(Function, Xs)
.
Програмування вищих порядків було започатковано у Пролозі в [en] та [en].
Модулі
Для Пролог пропонує систему модулів. Цю систему модулів стандартизовано ISO. Проте, не всі компілятори Прологу підтримують модулі, а також існують проблеми сумісності між системами модулів основних компіляторів Прологу. Отже, модулі, написані під одним компілятором Прологу, не обов'язково працюватимуть під іншими.
Граматичний розбір
Існує спеціальний запис, що називається граматиками визначених тверджень. Правило, визначене через -->/2
замість :-/2
, розкривається препроцесором (expand_term/2
, засіб, аналогічний макросам в інших мовах) відповідно до кількох прямих правил переписування, маючи результатом звичайні твердження Прологу. Найважливіше, що переписування споряджає предикат двома додатковими аргументами, що можуть використовуватися для неявного прокручування стану через них, аналогічно до монад в інших мовах. Граматики визначених тверджень часто використовуються для написання синтаксичних аналізаторів або генераторів списків, оскільки вони надають зручний інтерфейс до списків відмінностей.
Мета-інтерпретатори та рефлексія
Пролог є гомоіконною мовою, і забезпечує багато засобів для рефлексії. Її неявна стратегія виконання робить можливим написання стислого [en] (що також називають мета-інтерпретатором) коду чистої Пролог:
solve(true). solve((Subgoal1,Subgoal2)) :- solve(Subgoal1), solve(Subgoal2). solve(Head) :- clause(Head, Body), solve(Body).
де true
представляє порожню кон'юнкцію, а clause(Head, Body)
об'єднується з твердженнями бази даних вигляду Head :- Body
.
Оскільки прологові програми самі є послідовностями термів Прологу (:-/2
є інфіксним оператором), що легко читаються та аналізуються з використанням вбудованих механізмів (як-то read/1
), можливо писати спеціальні інтерпретатори, що розширюють Пролог предметно-орієнтованими властивостями. Наприклад, Стерлінг та Шапіро представляють мета-інтерпретатор, що виконує міркування з неточностями, відтворений тут із незначними видозмінами:
solve(true, 1) :- !. solve((Subgoal1,Subgoal2), Certainty) :- !, solve(Subgoal1, Certainty1), solve(Subgoal2, Certainty2), Certainty is min(Certainty1, Certainty2). solve(Goal, 1) :- builtin(Goal), !, Goal. solve(Head, Certainty) :- clause_cf(Head, Body, Certainty1), solve(Body, Certainty2), Certainty is Certainty1 * Certainty2.
Цей інтерпретатор використовує таблицю вбудованих предикатів Пролог у вигляді
builtin(A is B). builtin(read(X)). % etc.
та твердження, представлені як clause_cf(Голова, Тіло, Впевненість)
. Враховуючи це, його можна викликати як solve(Ціль, Впевненість)
, щоби виконати Ціль
та отримати міру впевненості в результаті.
Повнота за Тюрингом
Чиста Пролог базується на підмножині предикатної логіки першого порядку, диз'юнктах Горна, що є повною за Тюрингом. Повноту Прологу за Тюрингом може бути показано шляхом використання її для імітації машини Тюрінга:
turing(Tape0, Tape) :- perform(q0, [], Ls, Tape0, Rs), reverse(Ls, Ls1), append(Ls1, Rs, Tape). perform(qf, Ls, Ls, Rs, Rs) :- !. perform(Q0, Ls0, Ls, Rs0, Rs) :- symbol(Rs0, Sym, RsRest), once(rule(Q0, Sym, Q1, NewSym, Action)), action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1), perform(Q1, Ls1, Ls, Rs1, Rs). symbol([], b, []). symbol([Sym|Rs], Sym, Rs). action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs). action(stay, Ls, Ls, Rs, Rs). action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs). left([], [], Rs0, [b|Rs0]). left([L|Ls], Ls, Rs, [L|Rs]).
Простий приклад машини Тюринга визначається фактами:
rule(q0, 1, q0, 1, right). rule(q0, b, qf, 1, stay).
Ця машина виконує збільшення на одиницю числа в унарному кодуванні: вона проходить будь-яке число комірок «1» та додає додаткову «1» у кінці. Приклад запиту та результату:
?- turing([1,1,1], Ts). Ts = [1, 1, 1, 1] ;
Це показує, як будь-яке обчислення може бути представлено декларативно як послідовність переходів станів, реалізовану в Пролозі як відношення між послідовними станами, що нас цікавлять.
Реалізація
Детальніші відомості з цієї теми ви можете знайти в статті [en].
Пролог ISO
Стандарт Прологу ISO складається з двох частин. ISO/IEC 13211-1, опублікована в 1995 році, намагається стандартизувати наявні застосування багатьох реалізацій ключових елементів Прологу. Вона прояснила аспекти цієї мови, що раніше були неоднозначними, і веде до переносності програм. Є дві еррати: Cor.1:2007 та Cor.2:2012. ISO/IEC 13211-2, опублікована в 2000 році, додає до стандарту підтримку модулів. Стандарт підтримується робочою групою [en]/[en]/WG17. Технічною дорадчою групою США для цього стандарту є ANSI X3J17.
Компіляція
Для більшої ефективності код Прологу зазвичай компілюється в код абстрактної машини, що часто знаходиться під впливом набору інструкцій базованої на регістрах [en]. Деякі реалізації вживають [en] для встановлення інформації про тип та напрямок предикатів під час компіляції, або, для вищої продуктивності, компілюють у код реальної машини. У спільноті логічного програмування придумування ефективних методів реалізації коду Прологу є полем активних досліджень, і в деяких реалізаціях застосовується багато інших методів виконання. Вони включають перетворення тверджень у двійкову форму та [en].[]
Хвостова рекурсія
Для детермінованих предикатів, що демонструють хвостову рекурсію, або, загальніше, хвостові виклики, прологові системи зазвичай реалізують добре відомий метод оптимізації, що зветься оптимізацією хвостового виклику (англ. Tail Call Optimization, TCO): Перед виконанням виклику в хвостовій позиції кадр стеку твердження скасовується. Отже, детерміновані предикати з хвостовою рекурсією виконуються з незмінним простором стеку, як цикли в інших мовах.
Індексування термів
Детальніші відомості з цієї теми ви можете знайти в статті [en].
Пошук тверджень, що є об'єднуваними із термом у запиті, є лінійним відносно кількості тверджень. [en] використовує структуру даних, що уможливлює суб-лінійний пошук. Індексування впливає лише на продуктивність програми, семантики воно не зачіпає. Більшість Прологів використовує індексування лише за першим термом, оскільки індексування за всіма термами є витратним, але прийоми на базі кодованих полями слів або [en] кодових слів забезпечують швидке індексування по всьому запитові та голові.
Табулювання
Деякі прологові системи ([en], XSB, Yap, B-Prolog та Ciao) реалізують метод мемоізації, що зветься табулювання, що звільняє користувача від необхідності зберігати проміжні результати вручну.
Підцілі, що зустрічаються під час виконання запиту, зберігаються в таблиці, разом із відповідями на ці підцілі. Якщо підціль зустрічається знову, то виконання використовує інформацію з таблиці, замість повторного виконання міркування над реченнями програми. Оригінальний текст (англ.) Subgoals encountered in a query evaluation are maintained in a table, along with answers to these subgoals. If a subgoal is re-encountered, the evaluation reuses information from the table rather than re-performing resolution against program clauses. |
Табулювання є просторово-часовим компромісом, тривалість виконання може бути зменшено за рахунок використання більшої кількості пам'яті для зберігання проміжних результатів.
Апаратна реалізація
Під час розробки проекту комп’ютерних систем п’ятої генерації були спроби реалізувати Пролог в апаратному вигляді з метою отримання швидшого виконання спеціальними архітектурами. До того ж, Пролог має ряд властивостей, що можуть дозволити прискорення шляхом паралельного виконання. Новішими підходами було компілювати обмежені прологові програми у програмовані користувачем вентильні матриці. Однак, швидкий розвиток апаратного забезпечення загального призначення послідовно випередив спеціалізованіші архітектури.
Недоліки
Хоча Пролог широко застосовується в дослідницькій роботі та освіті, вона та інші логічні мови програмування не справили істотного впливу на комп'ютерну промисловість у цілому. Більшість застосунків є малими за промисловими стандартами, лише деякі з них мають понад 100,000 рядків коду. вважається складним, оскільки не всі компілятори Прологу підтримують модулі, а також існують проблеми сумісності між системами модулів основних прологових компіляторів. Переносність коду Прологу між реалізаціями також була проблемою, але розробка після 2007 року означала: «переносність всередині сімейства реалізацій Прологу, що походять від Единбурзької Пролог або Quintus, є достатньо гарною для підтримки реальних переносних програм».
Програмне забезпечення, розроблене на Пролозі, критикувалося за високі втрати продуктивності у порівнянні зі звичайними мовами програмування. Зокрема, прологова недетерміністська стратегія виконання може бути проблематичною при програмуванні детерміністських обчислень, або навіть при використанні «незважання на недетермінізм» (коли робиться єдиний вибір замість зворотнього пошуку всіма можливими). Для досягнення бажаної продуктивності може доводитися застосовувати відсікання та інші мовні конструкції, руйнуючи одну з головних принад Прологу, здатність виконувати програми «назад і вперед».
Пролог не є чисто декларативною: оскільки вона має конструкції на кшталт оператора відсікання, для її розуміння потрібне також і процедурне прочитання написаних нею програм. Порядок тверджень у прологовій програмі є суттєвим, оскільки стратегія виконання цієї мови залежить від нього. Інші логічні мови програмування, такі як Datalog, є чисто декларативними, але це обмежує мову. В результаті багато практичних прологових програм написано так, щоби вони відповідали прологовому пошуку в глибину, а не як чисто декларативні логічні програми.
Розширення
З Прологу було розвинуто різноманітні реалізації для розширення можливостей логічного програмування у численних напрямках. Вони включають типи, режими, [en] (англ. CLP), об'єктно-орієнтоване логічне програмування (англ. OOLP), паралелізм, [en], можливості функційного програмування та програмування [en], плюс функціональну сумісність з базами знань:
Типи
Пролог є нетипізованою мовою. Спроби запровадити типи сходять до 1980-х років, і станом на 2008 рік все ще існують спроби розширити Пролог типами. Ця інформація корисна не лише для безпечної типізації, а й для розуміння прологових програм.
Режими
Ознака режиму | Інтерпретація |
---|---|
+ | nonvar на вході |
- | var на вході |
? | Не визначено |
Синтаксис Прологу не визначає, які з аргументів предикату є вхідними, а які вихідними. Проте ця інформація є істотною, і рекомендується включати її до коментарів. Режими надають цінну інформацію для розуміння прологових програм, а також можуть використовуватися для прискорення виконання.
Обмеження
[en] розширює Пролог включенням концепцій із [en]. Програма з логікою обмежень дозволяє обмеження в тілах тверджень, як, наприклад, A(X,Y) :- X+Y>0.
Це підходить для великомасштабних задач комбінаторної оптимізації й, отже, для застосувань у промислових умовах, таких як автоматизоване складання розкладів та [en]. Більшість прологових систем постачаються із щонайменше одним розв'язувачем обмежень для зліченних областей визначення, а часто також і з розв'язувачами для інших областей визначення, таких як дійсні числа.
Об'єктна орієнтація
[en] є об'єктно-орієнтованим представленням знань та системою міркувань на базі [en], і включає [en], [en] та [en].
[en] — це об'єктно-орієнтована мова логічного програмування, що може застосовувати більшість реалізацій Прологу як внутрішній компілятор. Як мультипарадигмова мова, вона включає підтримку як прототипів, так і класів.
— це невелике переносне об'єктно-орієнтоване розширення Прологу від Маргарити Макдугалл (англ. Margaret McDougall) з EdCAAD Единбурзького університету.
[en] була фреймовою мовою, що поєднувала об'єкти та Пролог II від НЦНД Франції у Марселі.
[en] було розроблено компанією [en], і вперше випущено у 1989 році для ПК MS-DOS. Було додано підтримку для інших платформ, і 1995 року випущено другу версію. У 1994 році видавництвом Addison-Wesley було опубліковано книгу Кріса Мосса (англ. Chris Moss) про Prolog++.
Графіка
Прологовими системами, що пропонують графічну бібліотеку, є SWI-prolog, Visual-prolog, LPA Prolog для Windows та B-Prolog.
Паралелізм
є розширенням SWI-Prolog з відкритим кодом для розподілених обчислень через інтерфейс передачі повідомлень (англ. MPI). Також існує декілька конкурентних мов програмування Пролог.
Вебпрограмування
Деякі реалізації Прологу, особливо SWI-Prolog та Ciao, підтримують вебпрограмування на серверному боці з підтримкою вебпротоколів, HTML та XML. Існують також розширення для підтримки форматів семантичної павутини, таких як RDF та OWL. Пролог також пропонувалася як мова клієнтського боку.
Adobe Flash
Cedar є безкоштовним та елементарним інтерпретатором Прологу. Від версії 4 та вище Cedar має підтримку FCA (Flash Cedar App). Це забезпечує нову платформу для програмування Прологом через ActionScript.
Інші
- [en] розширює Пролог фреймами/об'єктами для представлення знань.
- [en] розширює Пролог теорією логіки операторів оновлення, що змінюють стан. Вона має як теоретико-модельну, так і процедурну семантику.
- було створено, щоби дати відповідь на брак графіки та інтерфейсу в Пролозі.
Інтерфейси до інших мов
Існують каркаси для сполучення між Прологом та іншими мовами:
- LPA Intelligence Server дозволяє включення LPA Prolog до C, C#, , Java, VB, Delphi, .NET, Lua, Python та інших мов. Він використовує спеціальний стрічковий тип даних, що надає LPA Prolog
- Logic Server API дозволяє як розширення Прологом, так і його включення до C, C++, Java, VB, Delphi, .NET та будь-яких інших мов/середовищ, що можуть викликати .dll або (.so). Його реалізовано для Amzi! Prolog + Logic Server, але специфікацію API може бути зроблено доступною для будь-якої реалізації.
- JPL — це двоспрямований міст між Java та Прологом, що постачається з SWI-Prolog за замовчуванням, і що дозволяє Java та Прологові викликати одне одного (рекурсивно). Він відомий гарною підтримкою паралельності, та знаходиться в активній розробці.
- , програмна бібліотека мосту між Java та Прологом, що реалізує двоспрямовані виклики предикатів/методів між обома мовами. Об'єкти Java можуть відображатися у терми Прологу, і навпаки. Дозволяє розробку графічного інтерфейсу користувача та іншої функціональності в Java, залишаючи обробку логіки в шарі Прологу. Підтримує XSB, із запланованою на 2013 рік підтримкою SWI-Prolog та YAP.
- [en] надає інтеграцію рідного синтаксису з Java, обмін повідомленнями між програмними агентами та правила реакції. Prova позиціонує себе як скриптову систему на базі правил (англ. rule-based scripting, RBS) для підпрограмного забезпечення. Ця мова відкриває нові обрії у поєднанні імперативного та декларативного програмування.
- це вбудовуваний рушій Прологу для Java. Він включає невелике інтегроване середовище розробки та декілька бібліотек.
- GNU Prolog для Java є реалізацією Прологу ISO як бібліотеки Java (gnu.prolog)
- [en] надає інтерфейси до C, C++, Java та реляційних баз даних.
- C#-Prolog є інтерпретатором Прологу, написаним (керованою) C#. Може легко інтегруватися до програм мовою C#. Характеристики: надійний та досить швидкий інтерпретатор, інтерфейс командного рядка, інтерфейс Windows, вбудована граматика визначених тверджень, XML-предикати, SQL-предикати, розширюваний. Доступний повний джерельний код, включно з генератором синтаксичного аналізатора, що може бути використано для додавання розширень особливого призначення.
- Jekejeke Prolog API[недоступне посилання з квітня 2019] надає сильнозв'язані можливості паралельних вхідних та вихідних викликів між Прологом та Java або Android, з визначною можливістю створення індивідуальних об'єктів баз знань. Він може застосовуватися для вбудовування Прологу ISO до самостійних застосунків, аплетів, сервлетів, APK тощо.
- Абстрактна машина Воррена для PHP, компілятор та інтерпретатор Прологу в PHP 5.3. Бібліотека, що може використовуватися самостійно, або з каркасом Symfony2.1.
Історія
Назву Пролог (фр. Prolog) було обрано [fr] як абревіатуру від програмування в логіці (фр. programmation en logique). Пролог було створено в 1972 році [en] з Філіпом Русселем на основі процедурної інтерпретації диз'юнктів Горна Роберта Ковальського. Це було частково мотивоване бажанням примирити використання логіки як мови декларативного представлення знань з процедурним представленням знань, що було популярне в Північній Америці наприкінці 1960-х і на початку 1970-х років. Згідно Роберта Ковальського, першу прологову систему було розроблено в 1972 році Аланом Кольмерое та Філіпом Русселем. Перші реалізації Прологу були інтерпретаторами. Однак, [en] створив [en], ранній та впливовий компілятор Прологу, що прийшов, щоби визначити «Единбурзький» діалект Прологу, що послужив основою синтаксису більшості сучасних реалізацій.
Європейські дослідники штучного інтелекту віддавали перевагу Прологу, тоді як американці віддавали перевагу Ліспу, що, як повідомлялося, призводило до численних націоналістичних дебатів про переваги цих мов. Більшість сучасних розробок Прологу пішли від поштовху проекту комп’ютерних систем п’ятої генерації, в рамках якого було розроблено варіант Прологу під назвою [en] для його першої операційної системи.
Чисту Пролог було спочатку обмежено використанням системи доведення теорем з диз'юнктами Горна форми:
Г :- Т1, ..., Тn.
Застосунок системи доведення теорем обробляє такі твердження як процедури:
щоби показати/розв'язати Г, покажи/розв'яжи Т1 та ... та Тn.
Однак, чисту Пролог незабаром було розширено включенням заперечення як відмови, в якому заперечні умови форми not(Тi) показуються шляхом спроби і невдачі доведення відповідних позитивних умов Тi.
Подальші розширення Прологу оригінальною командою ввели до реалізацій можливості [en].
Використання у промисловості
Пролог використовувалася в комп'ютерній системі Watson. Watson використовує програмне забезпечення DeepQA компанії IBM та програмний каркас Apache [en] (англ. Unstructured Information Management Architecture, Архітектура Керування Неструктурованою Інформацією). Цю систему було написано багатьма мовами, включно з Java, C++ та Пролог, вона працює на операційній системі [en] 11 з використанням програмного каркаса Apache Hadoop для забезпечення розподілених обчислень. Пролог використовується для зіставлення зі зразками над синтаксичними деревами природної мови. Розробники цієї системи заявили:
Ми потребували мови, якою ми могли би зручно виражати правила зіставлення зі зразками над синтаксичними деревами та іншими тлумаченнями (такими як результати розпізнавання іменованих сутностей), і технології, здатної виконувати ці правила дуже ефективно. Ми виявили, що Пролог була ідеальним вибором такої мови через свою простоту та виразність. Оригінальний текст (англ.) We required a language in which we could conveniently express pattern matching rules over the parse trees and other annotations (such as named entity recognition results), and a technology that could execute these rules very efficiently. We found that Prolog was the ideal choice for the language due to its simplicity and expressiveness. |
Див. також
- [en]
- [en]. Метод побудови систем на основі знань, що використовує Пролог.
- Програмування наборами відповідей. Повністю декларативний підхід до логічного програмування.
- [en]
Споріднені мови
- Мова [en] є суворо типізованою реалізацією [en]. Її побудовано на базі SICStus Prolog.
- [en], раніше відома як PDC Prolog та Turbo Prolog, є суворо типізованим об'єктно-орієнтованим діалектом Прологу, що дуже сильно відрізняється від стандартної Пролог. Як Turbo Prolog вона просувалася компанією Borland, але тепер вона розробляється та просувається данською фірмою PDC (Prolog Development Center), яка її спочатку і створила.
- Datalog є підмножиною Прологу. Вона обмежена відношеннями, що можуть стратифіковуватися, і не дозволяє складених термів. На відміну від Прологу, Dalalog не є повною за Тюрингом.
- [en] є відгалуженням від Прологу, спрямованим на , і має статичну, поліморфну систему типізації, а також систему режимів та детермінізму.
- [en] [en] є власною реалізацією абстрактної машини Воррена, з додатковими об'єктно-орієнтованими властивостями.
- У певному сенсі[] Пролог є підмножиною мови Planner. Пізніше ідеї мови Planner було розвинуто у [en].
- є варіантом Прологу для програмування поведінки агентів у багатоагентних системах.
- Erlang почала життя з реалізації на базі Прологу, і зберігає більшість синтаксису Прологу на базі об'єднань.
Примітки
- Clocksin, William F.; Mellish, Christopher S. (2003), Programming in Prolog, Berlin ; New York: Springer-Verlag, ISBN (англ.)
- Bratko, Ivan (2001), Prolog programming for artificial intelligence, Harlow, England ; New York: Addison Wesley, ISBN (англ.)
- Covington, Michael A. (1994), Natural language processing for Prolog programmers, Englewood Cliffs, N.J.: Prentice Hall, ISBN (англ.)
- Lloyd, J. W. (1984), Foundations of logic programming, Berlin: Springer-Verlag, ISBN (англ.)
- Kowalski, R. A. (1988). The early years of logic programming (PDF). Communications of the ACM. 31: 38. doi:10.1145/35043.35046. (англ.)
- Colmerauer, A.; Roussel, P. (1993). The birth of Prolog (PDF). ACM SIGPLAN Notices. 28 (3): 37. doi:10.1145/155360.155362. (англ.)
- Див. (Логічне програмування#Історія).
- Stickel, M. E. (1988). A prolog technology theorem prover: Implementation by an extended prolog compiler. Journal of Automated Reasoning. 4 (4): 353—380. doi:10.1007/BF00297245. (англ.)
- Merritt, Dennis (1989), Building expert systems in Prolog, Berlin: Springer-Verlag, ISBN (англ.)
- Fernando C. N. Pereira; Stuart M. Shieber (2005). Prolog and Natural Language Analysis. Microtome. (англ.)
- Adam Lally; Paul Fodor (31 березня 2011). . Association for Logic Programming. Архів оригіналу за 3 вересня 2014. Процитовано 31 серпня 2014. (англ.) Див. також IBM Watson.
- Covington, Michael A.; Bagnara, Roberto; ; Wielemaker, Jan; Price, Simon (2011). Coding guidelines for Prolog. Theory and Practice of Logic Programming. 12 (6): 889—927. arXiv:0911.2899. doi:10.1017/S1471068411000391. (англ.)
- Kirschenbaum, M.; Sterling, L.S. (1993), Applying Techniques to Skeletons, Constructing Logic Programs, (ed. J.M.J. Jacquet): 27—140 (англ.)
- Sterling, Leon (2002). Patterns for Prolog Programming. Computational Logic: Logic Programming and Beyond. Lecture Notes in Computer Science / Lecture Notes in Artificial Intelligence. Т. 2407. с. 17—26. doi:10.1007/3-540-45628-7_15. ISBN . (англ.)
- D. Barker-Plummer. Cliche programming in Prolog. In M. Bruynooghe, editor, Proc. Second Workshop on Meta-Programming in Logic, pages 247–256. Dept. of Comp. Sci., Katholieke Univ. Leuven, 1990. (англ.)
- Gegg-harrison, T. S. (1995). Representing Logic Program Schemata in Prolog. Procs. Twelfth International Conference on Logic Programming. с. 467—481. (англ.)
- Deville, Yves (1990), Logic programming: systematic program development, Wokingham, England: Addison-Wesley, ISBN (англ.)
- Naish, Lee (1996), Higher-order logic programming in Prolog, Department of Computer Science, University of Melbourne, процитовано 2 листопада 2010 (англ.)
- With regard to Prolog variables, variables only in the head are implicitly universally quantified, and those only in the body are implicitly existentially quantified. Процитовано 04 травня 2013. (англ.)
- ISO/IEC 13211: Information technology — Programming languages — Prolog. International Organization for Standardization, Geneva. (англ.)
- ISO/IEC 13211-2: Modules. (англ.)
- Paulo Moura, Logtalk in Association of Logic Programming Newsletter. Vol 17 n. 3, August 2004. [1] [ 2010-04-12 у Wayback Machine.] (англ.)
- Shapiro; Ehud, Y.; Sterling, Leon (1994), The art of Prolog: advanced programming techniques, Cambridge, Mass: MIT Press, ISBN (англ.)
- Ed-Dbali, A.; Deransart, Pierre; Cervoni, L. (1996), Prolog: the standard: reference manual, Berlin: Springer, ISBN (англ.)
- ISO/IEC 13211-1:1995/Cor.1:2007 (англ.)
- ISO/IEC 13211-1:1995/Cor 2:2012 (англ.)
- WG17 Working Group [ 24 жовтня 2009 у Wayback Machine.] (англ.)
- X3J17 Committee [ 23 серпня 2009 у Wayback Machine.] (англ.)
- David H. D. Warren. «An abstract Prolog instruction set». Technical Note 309, SRI International, Menlo Park, CA, October 1983. (англ.)
- Van Roy, P.; Despain, A. M. (1992). High-performance logic programming with the Aquarius Prolog compiler. Computer. 25: 54. doi:10.1109/2.108055. (англ.)
- Graf, Peter (1995), Term indexing, Springer, ISBN (англ.)
- Wise, Michael J.; Powers, David M. W. (1986). Indexing Prolog Clauses via Superimposed Code Words and Field Encoded Words. International Symposium on Logic Programming. с. 203—210. (англ.)
- Colomb, Robert M. (1991). Enhancing unification in PROLOG through clause indexing. The Journal of Logic Programming. 10: 23. doi:10.1016/0743-1066(91)90004-9. (англ.)
- Swift, T. (1999). Tabling for non‐monotonic programming. Annals of Mathematics and Artificial Intelligence. 25 (3/4): 201—200. doi:10.1023/A:1018990308362. (англ.)
- Zhou, Neng-Fa; Sato, Taisuke (2003). Efficient Fixpoint Computation in Linear Tabling (PDF). Proceedings of the 5th ACM SIGPLAN International Conference on Principles and Practice of Declarative Programming: 275—283. (англ.)
- Swift, T.; Warren, D. S. (2011). XSB: Extending Prolog with Tabled Logic Programming. Theory and Practice of Logic Programming. 12: 157. doi:10.1017/S1471068411000500. (англ.)
- Abe, S.; Bandoh, T.; Yamaguchi, S.; Kurosawa, K.; Kiriyama, K. (1987). High performance integrated Prolog processor IPP. Proceedings of the 14th annual international symposium on Computer architecture - ISCA '87. с. 100. doi:10.1145/30350.30362. ISBN . (англ.)
- Robinson, Ian (1986). A Prolog processor based on a pattern matching memory device. Third International Conference on Logic Programming. Lecture Notes in Computer Science. Т. 225. Springer. с. 172—179. doi:10.1007/3-540-16492-8_73. ISBN . (англ.)
- Taki, K.; Nakajima, K.; Nakashima, H.; Ikeda, M. (1987). Performance and architectural evaluation of the PSI machine. ACM SIGPLAN Notices. 22 (10): 128. doi:10.1145/36205.36195. (англ.)
- Gupta, G.; Pontelli, E.; Ali, K. A. M.; Carlsson, M.; Hermenegildo, M. V. (2001). Parallel execution of prolog programs: a survey. ACM Transactions on Programming Languages and Systems. 23 (4): 472. doi:10.1145/504083.504085. (англ.)
- http://www.cl.cam.ac.uk/~am21/research/sa/byrdbox.ps.gz (англ.)
- Logic programming for the real world. Zoltan Somogyi, Fergus Henderson, Thomas Conway, Richard O'Keefe. Proceedings of the ILPS'95 Postconference Workshop on Visions for the Future of Logic Programming. (англ.)
- The Prolog 1000 database http://www.faqs.org/faqs/prolog/resource-guide/part1/section-9.html (англ.)
- Jan Wielemaker and Vıtor Santos Costa: Portability of Prolog programs: theory and case-studies. CICLOPS-WLPE Workshop 2010 [ 2010-07-16 у Wayback Machine.]. (англ.)
- Kiselyov, Oleg; Kameyama, Yukiyoshi (2014). Re-thinking Prolog. Proc. 31st meeting of the Japan Society for Software Science and Technology. (англ.)
- Torkel Franzen (1994). Declarative vs procedural. Association of Logic Programming Newsletter. Vol 7(3). (англ.)
- Dantsin, Evgeny; Eiter, Thomas; Gottlob, Georg; Voronkov, Andrei (2001). Complexity and Expressive Power of Logic Programming. ACM Computing Surveys. 33 (3): 374—425. doi:10.1145/502807.502810. (англ.)
- Mycroft, A.; O'Keefe, R. A. (1984). A polymorphic type system for prolog. Artificial Intelligence. 23 (3): 295. doi:10.1016/0004-3702(84)90017-1. (англ.)
- Pfenning, Frank (1992), Types in logic programming, Cambridge, Mass: MIT Press, ISBN (англ.)
- Schrijvers, Tom; Santos Costa, Vitor; Wielemaker, Jan; Demoen, Bart (2008). Towards Typed Prolog. У Maria Garcia de la Banda; Enrico Pontelli (ред.). Logic programming : 24th international conference, ICLP 2008, Udine, Italy, December 9-13, 2008 : proceedings. Lecture Notes in Computer Science. Т. 5366. с. 693—697. doi:10.1007/978-3-540-89982-2_59. ISBN . (англ.)
- Apt, K. R.; Marchiori, E. (1994). Reasoning about Prolog programs: From modes through types to assertions. Formal Aspects of Computing. 6 (6): 743. doi:10.1007/BF01213601. (англ.)
- O'Keefe, Richard A. (1990), The craft of Prolog, Cambridge, Mass: MIT Press, ISBN (англ.)
- Michael Covington та ін. (2010). Coding guidelines for Prolog. arXiv:0911.2899 [cs.PL]. (англ.)
- Roy, P.; Demoen, B.; Willems, Y. D. (1987). Improving the execution speed of compiled Prolog with modes, clause selection, and determinism. Tapsoft '87. Lecture Notes in Computer Science. Т. 250. с. 111. doi:10.1007/BFb0014976. ISBN . (англ.)
- Jaffar, J. (1994). Constraint logic programming: a survey. The Journal of Logic Programming. 19—20: 503—581. doi:10.1016/0743-1066(94)90033-7. (англ.)
- Colmerauer, Alain (1987), Opening the Prolog III Universe, Byte, August (англ.)
- Wallace, M. (2002). Constraint Logic Programming. Computational Logic: Logic Programming and Beyond. Lecture Notes in Computer Science. Т. 2407. с. 512—556. doi:10.1007/3-540-45628-7_19. ISBN . (англ.)
- XPCE graphics library. Архів оригіналу за 25 червня 2013. Процитовано 10 грудня 2012. (англ.)
- prolog-mpi. Apps.lumii.lv. Архів оригіналу за 25 червня 2013. Процитовано 16 вересня 2010. (англ.)
- Ehud Shapiro. The family of concurrent logic programming languages [en]. September 1989. (англ.)
- Wielemaker, J.; Huang, Z.; Van Der Meij, L. (2008). SWI-Prolog and the web. Theory and Practice of Logic Programming. 8 (03). doi:10.1017/S1471068407003237. (англ.)
- Jan Wielemaker and Michiel Hildebrand and Jacco van Ossenbruggen (2007), S.Heymans, A. Polleres, E. Ruckhaus, D. Pearse, and G. Gupta (ред.), Using {Prolog} as the fundament for applications on the semantic web (PDF), Proceedings of the 2nd Workshop on Applications of Logic Programming and to the web, Semantic Web and Semantic Web Services, CEUR Workshop Proceedings, Porto, Portugal: CEUR-WS.org, т. 287, с. 84—98 (англ.)
- Processing OWL2 Ontologies using Thea: An Application of Logic Programming. Vangelis Vassiliadis, Jan Wielemaker and Chris Mungall. Proceedings of the 5th International Workshop on OWL: Experiences and Directions (OWLED 2009), Chantilly, VA, United States, October 23-24, 2009 (англ.)
- Loke, S. W.; Davison, A. (2001). Secure Prolog-based mobile code. Theory and Practice of Logic Programming. 1. doi:10.1017/S1471068401001211. (англ.)
- Pountain, Dick (Жовтень 1984). POP and SNAP. BYTE. с. 381. Процитовано 23 жовтня 2013. (англ.)
Література
- Blackburn, Patrick; Bos, Johan; Striegnitz, Kristina (2006). Learn Prolog Now!. ISBN . (англ.)
- [en] Алгоритмы искусственного интеллекта на языке PROLOG. — М, СПб, К: Вильямс, 2004–640 с. — . (рос.)
- Clocksin W. F. Programming in Prolog: Using the ISO Standard / Mellish C. S. — Вид. 5 — Springer, 2003–299 с. — . (Це видання оновлено для Прологу ISO. Попередні видання описували Единбурзьку Пролог.) (англ.)
- Clocksin W. F. Clause and Effect. Prolog Programming for the Working Programmer. — Springer, 2003–152 с. — . (англ.)
- Covington M. A. Prolog Programming in Depth / Nute D., Vellino A. — 1996–516 с. — . (англ.)
- Covington M. A. Natural Language Processing for Prolog Programmers. — 1994–348 с. — . (англ.)
- M. S. Dawe and C.M.Dawe, Prolog for Computer Sciences, Springer Verlag 1992. (англ.)
- ISO/IEC 13211: Information technology — Programming languages — Prolog. — Geneva: International Organization for Standardization. (англ.)
- Feliks Kluźniak and Stanisław Szpakowicz (with a contribution by Janusz S. Bień). Prolog for Programmers. Academic Press Inc. (London), 1985, 1987 (доступна під ліцензією Creative Commons на https://sites.google.com/site/prologforprogrammers/). . (англ.)
- [en] The Craft of Prolog. — 387 с. — . (англ.)
- Robert Smith, John Gibson, [en]: 'POPLOG's two-level virtual machine support for interactive languages', in Research Directions in Cognitive Science Volume 5: Artificial Intelligence, Eds D. Sleeman and N. Bernsen, Lawrence Erlbaum Associates, pp 203–231, 1992. (англ.)
- [en] Искусство программирования на языке Пролог / [en] — М: Мир, 1990–333 с. — . (рос.)
- Warren D. H. D. Prolog — the language and its implementation compared with Lisp / Pereira L. M., Pereira F. // ACM SIGART Bulletin archive, Issue 64. Proceedings of the 1977 symposium on Artificial intelligence and programming languages. — с. 109–115. (англ.)
- Трушевський В. М. Технології та мови програмування для штучного інтелекту. Частина 1: Основи програмування мовою Prolog. — Львів: 2006–120 с.
Посилання
Вікіпідручник має книгу на тему Пролог |
- comp.lang.prolog FAQ (англ.)
- Посібник користувача Прологу DECsystem-10 (текстовий формат) описує типову Единбурзьку Пролог (англ.)
- від J. R. Fisher (англ.)
- Виконувані приклади від Lloyd Allison (англ.)
- On-line guide to Prolog Programming від Roman Bartak (англ.)
- Learn Prolog Now! від Patrick Blackburn, Johan Bos та Kristina Striegnitz (англ.) (фр.)
- Prolog and Logic Programming від Dr Peter Hancox (англ.)
- Adventure in Prolog, навчальний інтернет-посібник від Dennis Merritt (англ.)
- Building Expert Systems in Prolog, інтернет-книга від Dennis Merritt (англ.)
- Literate programming in Prolog (англ.)
- Amzi! Prolog + Logic Server™ від Dennis Merritt (англ.)
- Prolog Tutorial I[недоступне посилання з квітня 2019] від Клайва Спенсера, LPA (англ.)
- Prolog Tutorial II[недоступне посилання з квітня 2019] від Клайва Спенсера, LPA (англ.)
- JIProlog від Уго Кірико (англ.)
- Progopedia:Prolog (рос.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Prolog znachennya Prolo g fr Prolog angl Prolog mova logichnogo programuvannya zagalnogo priznachennya pov yazana zi shtuchnim intelektom ta matematichnoyu lingvistikoyu PrologParadigmalogichne programuvannyaData poyavi1972Tvorcid Robert Kovalskij i dRozrobnik en Osnovni realizaciyi en en en en Jekejeke Prolog en Prolog en Quintus SICStus SWI Prolog XSB en DialektiProlog ISO Edinburzka PrologPid vplivom vidPlannerVplinula na en en en Erlang en en en Datalog en XSBZvichajni rozshirennya fajliv code pl pro P code Instrukciyi u Vikipidruchniku Prolog maye koreni v logici pershogo poryadku matematichnij logici ta na vidminu vid bagatoh inshih mov programuvannya ye deklarativnoyu logika programi virazhayetsya v terminah vidnoshen predstavlenih yak fakti ta pravila Obchislennya iniciyuyetsya zapuskom zapitu nad cimi vidnoshennyami Cyu movu programuvannya spochatku bulo zadumano grupoyu navkolo en v Marseli na pochatku 1970 h a pershu sistemu Prolog bulo rozrobleno v 1972 mu Alanom Kolmeroe ta fr Prolog bula odniyeyu z pershih logichnih mov programuvannya j zalishayetsya najpopulyarnishoyu sered takih mov i na sogodni mayuchi dekilka bezkoshtovnih ta komercijnih realizacij Yiyi zastosovuvali yak dlya dovedennya teorem ekspertnih sistem tak i dlya yiyi pochatkovoyi oblasti priznachennya obrobki prirodnoyi movi Suchasni seredovisha Prologu pidtrimuyut yak stvorennya grafichnih interfejsiv koristuvacha tak i administrativni abo merezhevi zastosuvannya Prolog dobre pidhodit dlya rozv yazannya specifichnih zadach sho vigrayu t vid logichnih zapitiv na bazi pravil takih yak poshuk bazami danih sistemi golosovogo keruvannya ta zapovnennya shabloniv Sintaksis ta semantikaDokladnishe Sintaksis ta semantika Prologu Programna logika u Prolozi virazhayetsya v terminah vidnoshen a obchislennya iniciyuyetsya zapuskom zapitu nad cimi vidnoshennyami Vidnoshennya ta zapiti stvoryuyutsya z vikoristannyam yedinogo tipu danih Prologu termu Vidnoshennya virazhayutsya tverdzhennyami Otrimavshi zapit rushij Prologu namagayetsya znajti sprostuvannya rezolyuciyi zaperechennya zapitu Yaksho zaperechennya zapitu mozhe buti sprostovano tobto znajdeno konkretizaciyu vsih vilnih zminnih sho robit ob yednannya atomarnih formul ta mnozhini singletonu sho skladayetsya iz zaperechennya zapitu hibnim to z cogo viplivaye sho pochatkovij zapit iz zastosuvannyam znajdenoyi konkretizaciyi ye logichnim visnovkom programi Ce robit Prolog ta inshi logichni movi programuvannya nadzvichajno zruchnoyu dlya zastosuvannya v bazah danih simvolnij matematici ta gramatichnomu analizi mov Oskilki Prolog dozvolyaye nechisti predikati perevirka istinnosti pevnih specialnih predikativ mozhe mati deyakij navmisnij pobichnij efekt yak to vivedennya znachennya na ekran Cherez ce programistovi dozvoleno pevnoyu miroyu vikoristovuvati zvichajne imperativne programuvannya koli logichna paradigma ye nezruchnoyu Prolog maye yak chistu logichnu pidmnozhinu sho nazivayetsya chista Prolog tak i ryad pozalogichnih vlastivostej Tipi danih Yedinim tipom danih Prologu ye term Termi mozhut buti atomami chislami zminnimi abo skladenimi termami Atom ce zagalna nazva bez pritamannogo znachennya Prikladami atomiv ye x sinij Pirizhok ta yakijs atom Chisla mozhut buti z ruhomoyu komoyu abo cilimi Zminni poznachayutsya strichkami sho skladayutsya z liter cifr ta simvoliv pidkreslennya i pochinayutsya z velikoyi literi abo simvolu pidkreslennya Zminni duzhe podibni do zminnih v logici tim sho voni ye poznachkami zapovnyuvachami dlya dovilnih termiv Skladenij term skladayetsya z atomu sho zvetsya funktor ta pevnoyi kilkosti argumentiv sho v svoyu chergu tezh ye termami Skladeni termi zazvichaj zapisuyutsya u viglyadi funktora za yakim u duzhkah sliduye perelik termiv argumentiv cherez komu Kilkist argumentiv nazivayetsya arnistyu termu Atom mozhe rozglyadatisya yak skladenij term nulovoyi arnosti rik mashini Tavriya 1988 ta Druzi Osobi graj oko tur ye prikladami skladenih termiv Osoblivi vipadki skladenih termiv Spisok ye vporyadkovanoyu kolekciyeyu termiv Vin poznachayetsya kvadratnimi duzhkami z termami rozdilenimi komami abo u vipadku porozhnogo spisku Napriklad 1 2 3 abo chervonij zelenij sinij Strichki poslidovnist simvoliv u lapkah ekvivalentna spiskovi chislovih kodiv simvoliv zazvichaj u miscevomu koduvanni abo v Yunikodi yaksho sistema pidtrimuye Yunikod Napriklad buti chi ne buti Pravila ta fakti Prologovi programi opisuyut vidnoshennya viznacheni tverdzhennyami Chista Prolog obmezhena diz yunktami Gorna Ye dva tipi tverdzhen fakti ta pravila Pravilo maye viglyad Golova Tilo i chitayetsya yak golova istinna yaksho tilo istinne Tilo pravila skladayetsya z viklikiv predikativ sho nazivayutsya cilyami pravila Vbudovanij predikat 2 sho znachit dvoarnij operator z im yam poznachaye kon yunkciyu cilej a 2 diz yunkciyu Kon yunkciyi ta diz yunkciyi mozhut buti prisutni lishe v tili ale ne v golovi pravila Tverdzhennya z porozhnimi tilami nazivayutsya faktami Napriklad kit bazilio sho rivnocinne pravilu kit bazilio true Vbudovanij predikat true 0 ye zavzhdi istinnim Mayuchi navedenij vishe fakt mozhna spitati chi ye bazilio kotom kit bazilio Yes sho ye kotami kit X X bazilio Tverdzhennya z tilami nazivayutsya pravilami Napriklad tvarina X kit X Yaksho mi dodamo ce pravilo ta spitayemo sho ye tvarinami tvarina X X bazilio Oskilki priroda bagatoh vbudovanih predikativ ye vidnosnoyu yih zazvichaj mozhna vikoristovuvati v kilkoh napryamkah Napriklad length 2 mozhe vikoristovuvatisya yak dlya viznachennya dovzhini spisku length List L koli zadano spisok List tak i dlya stvorennya kistyaka spisku zadanoyi dovzhini length X 5 a takozh i dlya stvorennya kistyakiv spiskiv ta yih dovzhin odnochasno length X L Tak samo append 3 mozhe vikoristovuvatisya yak dlya z yednannya dvoh spiskiv append ListA ListB X koli zadano spiski ListA ta ListB tak i dlya rozdilennya zadanogo spisku na chastini append X Y List koli zadano spisok List Tomu vidnosno nevelikij nabir bibliotechnih predikativ ye dostatnim dlya velikoyi kilkosti prologovih program Yak mova zagalnogo priznachennya Prolog takozh proponuye riznomanitni vbudovani predikati dlya vikonannya vsyakoyi potochnoyi diyalnosti yak to vvedennya vivedennya vikoristannya grafiki ta inshoyi vzayemodiyi z operacijnoyu sistemoyu Ci predikati ne mayut znachennya vidnoshen i korisni lishe dlya pobichnih efektiv sho voni sprichinyayut u sistemi Napriklad predikat write 1 vidobrazhaye term na ekrani Vikonannya Vikonannya prologovoyi programi pochinayetsya zadavannyam koristuvachem yedinoyi cili sho zvetsya zapitom Z tochki zoru logiki rushij Prologu namagayetsya znajti sprostuvannya rezolyuciyi zaperechennya cogo zapitu Metod rezolyuciyi sho vikoristovuyetsya u Prolozi nazivayetsya VLV rezolyuciyeyu Yaksho zaperechennya zapitu mozhe buti sprostovano z cogo viplivaye sho zapit z vidpovidnimi zv yazuvannyami zminnih ye logichnim visnovkom programi U takomu razi vsi stvoreni zv yazuvannya zminnih povidomlyayutsya koristuvachevi i pro zapit povidomlyayetsya sho vin dosyag uspihu Z praktichnoyi tochki zoru strategiyu vikonannya Prologu mozhna uyaviti yak uzagalnennya viklikiv funkcij v inshih movah z tiyeyu rizniceyu sho zadanomu zapitovi mozhut vidpovidati golovi kilkoh tverdzhen V takomu vipadku sistema stvoryuye tochku viboru ob yednuye cil z golovoyu tverdzhennya pershoyi alternativi i prodovzhuye cilyami ciyeyi pershoyi alternativi Yaksho v napryamku vikonannya programi bud yaka cil zaznaye nevdachi vsi zv yazuvannya zminnih sho bulo zrobleno vid ostannoyi na toj moment tochki viboru skasovuyutsya i vikonannya prodovzhuyetsya z nastupnoyu alternativoyu ciyeyi tochki viboru Cya strategiya vikonannya nazivayetsya hronologichnim poshukom z vertannyam Napriklad mati ditini irina svyatoslav batko ditini yaroslav svyatoslav batko ditini yaroslav anna batko ditini volodimir yaroslav brat abo sestra X Y batko abo mati ditini Z X batko abo mati ditini Z Y batko abo mati ditini X Y batko ditini X Y batko abo mati ditini X Y mati ditini X Y Vihodyachi z cogo nastupnij zapit ocinyuyetsya yak istinnij brat abo sestra svyatoslav anna Yes Ce otrimuyetsya takim chinom Spochatku yedinoyu vidpovidnoyu golovoyu tverdzhennya do zapitu brat abo sestra svyatoslav anna ye persha tomu nadavannya zapitu ye rivnocinnim nadavannyu tila togo tverdzhennya z vidpovidnimi zv yazuvannyami zminnih tobto kon yunkciya batko abo mati ditini Z svyatoslav batko abo mati ditini Z anna Nastupnoyu cillyu dlya dovedennya ye krajnya zliva z ciyeyi kon yunkciyi tobto batko abo mati ditini Z svyatoslav Cij cili vidpovidayut golovi dvoh pravil Sistema stvoryuye tochku viboru i probuye pershij vibir chiyim tilom ye batko ditini Z svyatoslav Cyu cil mozhe buti dovedeno z vikoristannyam faktu batko ditini yaroslav svyatoslav tomu stvoryuyetsya zv yazuvannya Z yaroslav i nastupnoyu cillyu dlya dovedennya staye druga chastina navedenoyi vishe kon yunkciyi batko abo mati ditini yaroslav anna I znovu ce mozhe buti dovedeno vidpovidnim faktom Oskilki vsi cili dovedeno zapit dosyagaye uspihu Oskilki zapit ne mistit zhodnih zminnih koristuvachevi ne povidomlyayutsya zhodni zv yazuvannya Zapit zi zminnimi yak to batko ditini Batko Ditina perelichuye vsi dijsni vidpovidi poshuku z vertannyam Zvernit uvagu sho z navedenim vishe kodom zapit brat abo sestra svyatoslav svyatoslav takozh dosyagaye uspihu Yaksho potribno mozhna dodati dodatkovi cili dlya opisu vidpovidnih obmezhen Cikli ta rekursiya Iterativni algoritmi mozhe buti realizovano zasobami rekursivnih predikativ Zaperechennya Vbudovanij predikat Prologu 1 zabezpechuye zaperechennya yak vidmovu sho umozhlivlyuye nemonotonnu argumentaciyu Cil nelegalne X u pravili legalne X nelegalne X obchislyuyetsya takim chinom Prolog namagayetsya dovesti nelegalne X Yaksho dovedennya ciyeyi cili znajdeno to pochatkova cil tobto nelegalne X zaznaye nevdachi Yaksho dovedennya ne mozhe buti znajdeno to pochatkova cil dosyagaye uspihu Otzhe prefiksnij operator 1 nazivayetsya operatorom nedovidne oskilki zapit Cil dosyagaye uspihu yaksho Cil ne ye dovidnoyu Cej vid zaperechennya ye pravilnim yaksho jogo argument ye zamknenim tobto ne mistit zminnih Pravilnist vtrachayetsya yaksho argument mistit zminni i procedura dovedennya ye povnoyu Zokrema zapit legalne X teper vzhe ne mozhe buti vikoristano dlya perelichennya usih rechej sho ye legalnimi Programuvannya movoyu PrologU Prolozi zavantazhennya kodu nazivayetsya vzyattyam do uvagi Prolog mozhe vikoristovuvatisya interaktivno shlyahom vvedennya zapitiv do pidkazki Prologu Yaksho rozv yazku ne isnuye to Prolog pishe no Yaksho rozv yazok isnuye to todi drukuyetsya vin Yaksho isnuye dekilka rozv yazkiv zapitu to yih mozhe buti zapitano vvedennyam krapki z komoyu Isnuyut kerivni principi z nalezhnoyi praktiki programuvannya dlya pokrashennya efektivnosti chitabelnosti ta pidtrimuvanosti kodu Dali sliduyut deyaki prikladi program napisanih movoyu Prolog Hello world Priklad zapitu write Privit svite nl Privit svite true Optimizaciya kompilyatorom Bud yake obchislennya mozhe buti virazheno deklarativno yak poslidovnist perehodu staniv Yak priklad optimizuvalnij kompilyator z troma prohodami optimizaciyi mozhe buti realizovano yak vidnoshennya mizh pochatkovoyu programoyu ta yiyi optimizovanoyu formoyu programa optimizovana Prog0 Prog optimizaciya prohid 1 Prog0 Prog1 optimizaciya prohid 2 Prog1 Prog2 optimizaciya prohid 3 Prog2 Prog abo rivnoznachno z vikoristannyam zapisu gramatiki viznachenih tverdzhen programa optimizovana gt optimizaciya prohid 1 optimizaciya prohid 2 optimizaciya prohid 3 Shvidke sortuvannya Algoritm shvidkogo sortuvannya sho stavit u vidpovidnist spiskovi jogo vidsortovanu versiyu rozdilennya rozdilennya X Xs Oporne Mali Veliki X lt Oporne gt Mali X Reshta rozdilennya Xs Oporne Reshta Veliki Veliki X Reshta rozdilennya Xs Oporne Mali Reshta shvidke sortuvannya gt shvidke sortuvannya X Xs gt rozdilennya Xs X Menshi Bilshi shvidke sortuvannya Menshi X shvidke sortuvannya Bilshi Shabloni proektuvannyaShablon proektuvannya ce zagalne rishennya bagatorazovogo vikoristannya poshirenoyi problemi u proektuvanni programnogo zabezpechennya U Prolozi shabloni proektuvannya mozhut nositi rizni nazvi kistyaki ta tehniki klishe programni shemi ta shemi opisu logiki Alternativoyu do shabloniv proektuvannya ye programuvannya vishih poryadkiv Programuvannya vishih poryadkivDetalnishi vidomosti z ciyeyi temi vi mozhete znajti v statti en ta Programuvannya vishih poryadkiv Predikat vishogo poryadku ce predikat sho maye odin abo bilshe inshih predikativ yak argumenti Hocha pidtrimka programuvannya vishih poryadkiv i vivodit Prolog z oblasti logiki pershogo poryadku yaka ne dozvolyaye kvantifikaciyi predikativ Prolog ISO vzhe maye deyaki vbudovani predikati vishih poryadkiv taki yak call 1 call 2 call 3 findall 3 setof 3 ta bagof 3 Krim togo oskilki dovilni cili Prologu mozhut stvoryuvatis ta ocinyuvatis u realnomu chasi neskladno pisati predikati vishih poryadkiv na kshtalt maplist 2 sho zastosovuye dovilnij predikat do kozhnogo elementa nadanogo spisku ta sublist 3 sho vidfiltrovuye elementi yaki zadovolnyayut nadanomu predikatovi umozhlivlyuyuchi takozh i karruvannya Dlya peretvorennya rishen z chasovogo predstavlennya pidstanovki vidpovidej pri zvorotnomu poshuku do prostorovogo predstavlennya termiv Prolog maye riznomanitni predikati dlya vsih rishen sho zbirayut vsi pidstanovki vidpovidej dlya zadanogo zapitu do spisku Ce mozhe vikoristovuvatisya u spiskovih virazah Napriklad doskonali chisla dorivnyuyut sumi svoyih dilnikiv perfect N between 1 inf N U is N 2 findall D between 1 U D N mod D 0 Ds sumlist Ds N Ce mozhe buti vikoristano dlya perelichuvannya doskonalih chisel a takozh dlya perevirki chi ye chislo doskonalim Yak inshij priklad predikat maplist zastosovuye predikat P do vsih vidpovidnih polozhen u pari spiskiv maplist maplist P X Xs Y Ys call P X Y maplist P Xs Ys Koli P ye takim predikatom sho dlya kozhnogo X P X Y ob yednuye Y z yedinim unikalnim znachennyam maplist P Xs Ys ye ekvivalentom zastosuvannya funkciyi map u funkcijnomu programuvanni yak Ys map Function Xs Programuvannya vishih poryadkiv bulo zapochatkovano u Prolozi v en ta en ModuliDlya Prolog proponuye sistemu moduliv Cyu sistemu moduliv standartizovano ISO Prote ne vsi kompilyatori Prologu pidtrimuyut moduli a takozh isnuyut problemi sumisnosti mizh sistemami moduliv osnovnih kompilyatoriv Prologu Otzhe moduli napisani pid odnim kompilyatorom Prologu ne obov yazkovo pracyuvatimut pid inshimi Gramatichnij rozbirDokladnishe Sintaksis ta semantika Prologu Gramatiki viznachenih tverdzhen ta Gramatika viznachenih tverdzhen Isnuye specialnij zapis sho nazivayetsya gramatikami viznachenih tverdzhen Pravilo viznachene cherez gt 2 zamist 2 rozkrivayetsya preprocesorom expand term 2 zasib analogichnij makrosam v inshih movah vidpovidno do kilkoh pryamih pravil perepisuvannya mayuchi rezultatom zvichajni tverdzhennya Prologu Najvazhlivishe sho perepisuvannya sporyadzhaye predikat dvoma dodatkovimi argumentami sho mozhut vikoristovuvatisya dlya neyavnogo prokruchuvannya stanu cherez nih analogichno do monad v inshih movah Gramatiki viznachenih tverdzhen chasto vikoristovuyutsya dlya napisannya sintaksichnih analizatoriv abo generatoriv spiskiv oskilki voni nadayut zruchnij interfejs do spiskiv vidminnostej Meta interpretatori ta refleksiyaProlog ye gomoikonnoyu movoyu i zabezpechuye bagato zasobiv dlya refleksiyi Yiyi neyavna strategiya vikonannya robit mozhlivim napisannya stislogo en sho takozh nazivayut meta interpretatorom kodu chistoyi Prolog solve true solve Subgoal1 Subgoal2 solve Subgoal1 solve Subgoal2 solve Head clause Head Body solve Body de true predstavlyaye porozhnyu kon yunkciyu a clause Head Body ob yednuyetsya z tverdzhennyami bazi danih viglyadu Head Body Oskilki prologovi programi sami ye poslidovnostyami termiv Prologu 2 ye infiksnim operatorom sho legko chitayutsya ta analizuyutsya z vikoristannyam vbudovanih mehanizmiv yak to read 1 mozhlivo pisati specialni interpretatori sho rozshiryuyut Prolog predmetno oriyentovanimi vlastivostyami Napriklad Sterling ta Shapiro predstavlyayut meta interpretator sho vikonuye mirkuvannya z netochnostyami vidtvorenij tut iz neznachnimi vidozminami 330 solve true 1 solve Subgoal1 Subgoal2 Certainty solve Subgoal1 Certainty1 solve Subgoal2 Certainty2 Certainty is min Certainty1 Certainty2 solve Goal 1 builtin Goal Goal solve Head Certainty clause cf Head Body Certainty1 solve Body Certainty2 Certainty is Certainty1 Certainty2 Cej interpretator vikoristovuye tablicyu vbudovanih predikativ Prolog u viglyadi 327 builtin A is B builtin read X etc ta tverdzhennya predstavleni yak clause cf Golova Tilo Vpevnenist Vrahovuyuchi ce jogo mozhna viklikati yak solve Cil Vpevnenist shobi vikonati Cil ta otrimati miru vpevnenosti v rezultati Povnota za TyuringomChista Prolog bazuyetsya na pidmnozhini predikatnoyi logiki pershogo poryadku diz yunktah Gorna sho ye povnoyu za Tyuringom Povnotu Prologu za Tyuringom mozhe buti pokazano shlyahom vikoristannya yiyi dlya imitaciyi mashini Tyuringa turing Tape0 Tape perform q0 Ls Tape0 Rs reverse Ls Ls1 append Ls1 Rs Tape perform qf Ls Ls Rs Rs perform Q0 Ls0 Ls Rs0 Rs symbol Rs0 Sym RsRest once rule Q0 Sym Q1 NewSym Action action Action Ls0 Ls1 NewSym RsRest Rs1 perform Q1 Ls1 Ls Rs1 Rs symbol b symbol Sym Rs Sym Rs action left Ls0 Ls Rs0 Rs left Ls0 Ls Rs0 Rs action stay Ls Ls Rs Rs action right Ls0 Sym Ls0 Sym Rs Rs left Rs0 b Rs0 left L Ls Ls Rs L Rs Prostij priklad mashini Tyuringa viznachayetsya faktami rule q0 1 q0 1 right rule q0 b qf 1 stay Cya mashina vikonuye zbilshennya na odinicyu chisla v unarnomu koduvanni vona prohodit bud yake chislo komirok 1 ta dodaye dodatkovu 1 u kinci Priklad zapitu ta rezultatu turing 1 1 1 Ts Ts 1 1 1 1 Ce pokazuye yak bud yake obchislennya mozhe buti predstavleno deklarativno yak poslidovnist perehodiv staniv realizovanu v Prolozi yak vidnoshennya mizh poslidovnimi stanami sho nas cikavlyat RealizaciyaDetalnishi vidomosti z ciyeyi temi vi mozhete znajti v statti en Prolog ISO Standart Prologu ISO skladayetsya z dvoh chastin ISO IEC 13211 1 opublikovana v 1995 roci namagayetsya standartizuvati nayavni zastosuvannya bagatoh realizacij klyuchovih elementiv Prologu Vona proyasnila aspekti ciyeyi movi sho ranishe buli neodnoznachnimi i vede do perenosnosti program Ye dvi errati Cor 1 2007 ta Cor 2 2012 ISO IEC 13211 2 opublikovana v 2000 roci dodaye do standartu pidtrimku moduliv Standart pidtrimuyetsya robochoyu grupoyu en en WG17 Tehnichnoyu doradchoyu grupoyu SShA dlya cogo standartu ye ANSI X3J17 Kompilyaciya Dlya bilshoyi efektivnosti kod Prologu zazvichaj kompilyuyetsya v kod abstraktnoyi mashini sho chasto znahoditsya pid vplivom naboru instrukcij bazovanoyi na registrah en Deyaki realizaciyi vzhivayut en dlya vstanovlennya informaciyi pro tip ta napryamok predikativ pid chas kompilyaciyi abo dlya vishoyi produktivnosti kompilyuyut u kod realnoyi mashini U spilnoti logichnogo programuvannya pridumuvannya efektivnih metodiv realizaciyi kodu Prologu ye polem aktivnih doslidzhen i v deyakih realizaciyah zastosovuyetsya bagato inshih metodiv vikonannya Voni vklyuchayut peretvorennya tverdzhen u dvijkovu formu ta en dzherelo Hvostova rekursiya Dlya determinovanih predikativ sho demonstruyut hvostovu rekursiyu abo zagalnishe hvostovi vikliki prologovi sistemi zazvichaj realizuyut dobre vidomij metod optimizaciyi sho zvetsya optimizaciyeyu hvostovogo vikliku angl Tail Call Optimization TCO Pered vikonannyam vikliku v hvostovij poziciyi kadr steku tverdzhennya skasovuyetsya Otzhe determinovani predikati z hvostovoyu rekursiyeyu vikonuyutsya z nezminnim prostorom steku yak cikli v inshih movah Indeksuvannya termiv Detalnishi vidomosti z ciyeyi temi vi mozhete znajti v statti en Poshuk tverdzhen sho ye ob yednuvanimi iz termom u zapiti ye linijnim vidnosno kilkosti tverdzhen en vikoristovuye strukturu danih sho umozhlivlyuye sub linijnij poshuk Indeksuvannya vplivaye lishe na produktivnist programi semantiki vono ne zachipaye Bilshist Prologiv vikoristovuye indeksuvannya lishe za pershim termom oskilki indeksuvannya za vsima termami ye vitratnim ale prijomi na bazi kodovanih polyami sliv abo en kodovih sliv zabezpechuyut shvidke indeksuvannya po vsomu zapitovi ta golovi Tabulyuvannya Deyaki prologovi sistemi en XSB Yap B Prolog ta Ciao realizuyut metod memoizaciyi sho zvetsya tabulyuvannya sho zvilnyaye koristuvacha vid neobhidnosti zberigati promizhni rezultati vruchnu Pidcili sho zustrichayutsya pid chas vikonannya zapitu zberigayutsya v tablici razom iz vidpovidyami na ci pidcili Yaksho pidcil zustrichayetsya znovu to vikonannya vikoristovuye informaciyu z tablici zamist povtornogo vikonannya mirkuvannya nad rechennyami programi Originalnij tekst angl Subgoals encountered in a query evaluation are maintained in a table along with answers to these subgoals If a subgoal is re encountered the evaluation reuses information from the table rather than re performing resolution against program clauses Tabulyuvannya ye prostorovo chasovim kompromisom trivalist vikonannya mozhe buti zmensheno za rahunok vikoristannya bilshoyi kilkosti pam yati dlya zberigannya promizhnih rezultativ Aparatna realizaciya Pid chas rozrobki proektu komp yuternih sistem p yatoyi generaciyi buli sprobi realizuvati Prolog v aparatnomu viglyadi z metoyu otrimannya shvidshogo vikonannya specialnimi arhitekturami Do togo zh Prolog maye ryad vlastivostej sho mozhut dozvoliti priskorennya shlyahom paralelnogo vikonannya Novishimi pidhodami bulo kompilyuvati obmezheni prologovi programi u programovani koristuvachem ventilni matrici Odnak shvidkij rozvitok aparatnogo zabezpechennya zagalnogo priznachennya poslidovno viperediv specializovanishi arhitekturi NedolikiHocha Prolog shiroko zastosovuyetsya v doslidnickij roboti ta osviti vona ta inshi logichni movi programuvannya ne spravili istotnogo vplivu na komp yuternu promislovist u cilomu Bilshist zastosunkiv ye malimi za promislovimi standartami lishe deyaki z nih mayut ponad 100 000 ryadkiv kodu vvazhayetsya skladnim oskilki ne vsi kompilyatori Prologu pidtrimuyut moduli a takozh isnuyut problemi sumisnosti mizh sistemami moduliv osnovnih prologovih kompilyatoriv Perenosnist kodu Prologu mizh realizaciyami takozh bula problemoyu ale rozrobka pislya 2007 roku oznachala perenosnist vseredini simejstva realizacij Prologu sho pohodyat vid Edinburzkoyi Prolog abo Quintus ye dostatno garnoyu dlya pidtrimki realnih perenosnih program Programne zabezpechennya rozroblene na Prolozi kritikuvalosya za visoki vtrati produktivnosti u porivnyanni zi zvichajnimi movami programuvannya Zokrema prologova nedeterministska strategiya vikonannya mozhe buti problematichnoyu pri programuvanni deterministskih obchislen abo navit pri vikoristanni nezvazhannya na nedeterminizm koli robitsya yedinij vibir zamist zvorotnogo poshuku vsima mozhlivimi Dlya dosyagnennya bazhanoyi produktivnosti mozhe dovoditisya zastosovuvati vidsikannya ta inshi movni konstrukciyi rujnuyuchi odnu z golovnih prinad Prologu zdatnist vikonuvati programi nazad i vpered Prolog ne ye chisto deklarativnoyu oskilki vona maye konstrukciyi na kshtalt operatora vidsikannya dlya yiyi rozuminnya potribne takozh i procedurne prochitannya napisanih neyu program Poryadok tverdzhen u prologovij programi ye suttyevim oskilki strategiya vikonannya ciyeyi movi zalezhit vid nogo Inshi logichni movi programuvannya taki yak Datalog ye chisto deklarativnimi ale ce obmezhuye movu V rezultati bagato praktichnih prologovih program napisano tak shobi voni vidpovidali prologovomu poshuku v glibinu a ne yak chisto deklarativni logichni programi RozshirennyaZ Prologu bulo rozvinuto riznomanitni realizaciyi dlya rozshirennya mozhlivostej logichnogo programuvannya u chislennih napryamkah Voni vklyuchayut tipi rezhimi en angl CLP ob yektno oriyentovane logichne programuvannya angl OOLP paralelizm en mozhlivosti funkcijnogo programuvannya ta programuvannya en plyus funkcionalnu sumisnist z bazami znan Tipi Prolog ye netipizovanoyu movoyu Sprobi zaprovaditi tipi shodyat do 1980 h rokiv i stanom na 2008 rik vse she isnuyut sprobi rozshiriti Prolog tipami Cya informaciya korisna ne lishe dlya bezpechnoyi tipizaciyi a j dlya rozuminnya prologovih program Rezhimi Oznaka rezhimu Interpretaciya nonvar na vhodi var na vhodi Ne viznacheno Sintaksis Prologu ne viznachaye yaki z argumentiv predikatu ye vhidnimi a yaki vihidnimi Prote cya informaciya ye istotnoyu i rekomenduyetsya vklyuchati yiyi do komentariv Rezhimi nadayut cinnu informaciyu dlya rozuminnya prologovih program a takozh mozhut vikoristovuvatisya dlya priskorennya vikonannya Obmezhennya en rozshiryuye Prolog vklyuchennyam koncepcij iz en Programa z logikoyu obmezhen dozvolyaye obmezhennya v tilah tverdzhen yak napriklad A X Y X Y gt 0 Ce pidhodit dlya velikomasshtabnih zadach kombinatornoyi optimizaciyi j otzhe dlya zastosuvan u promislovih umovah takih yak avtomatizovane skladannya rozkladiv ta en Bilshist prologovih sistem postachayutsya iz shonajmenshe odnim rozv yazuvachem obmezhen dlya zlichennih oblastej viznachennya a chasto takozh i z rozv yazuvachami dlya inshih oblastej viznachennya takih yak dijsni chisla Ob yektna oriyentaciya en ye ob yektno oriyentovanim predstavlennyam znan ta sistemoyu mirkuvan na bazi en i vklyuchaye en en ta en en ce ob yektno oriyentovana mova logichnogo programuvannya sho mozhe zastosovuvati bilshist realizacij Prologu yak vnutrishnij kompilyator Yak multiparadigmova mova vona vklyuchaye pidtrimku yak prototipiv tak i klasiv ce nevelike perenosne ob yektno oriyentovane rozshirennya Prologu vid Margariti Makdugall angl Margaret McDougall z EdCAAD Edinburzkogo universitetu en bula frejmovoyu movoyu sho poyednuvala ob yekti ta Prolog II vid NCND Franciyi u Marseli en bulo rozrobleno kompaniyeyu en i vpershe vipusheno u 1989 roci dlya PK MS DOS Bulo dodano pidtrimku dlya inshih platform i 1995 roku vipusheno drugu versiyu U 1994 roci vidavnictvom Addison Wesley bulo opublikovano knigu Krisa Mossa angl Chris Moss pro Prolog Grafika Prologovimi sistemami sho proponuyut grafichnu biblioteku ye SWI prolog Visual prolog LPA Prolog dlya Windows ta B Prolog Paralelizm ye rozshirennyam SWI Prolog z vidkritim kodom dlya rozpodilenih obchislen cherez interfejs peredachi povidomlen angl MPI Takozh isnuye dekilka konkurentnih mov programuvannya Prolog Vebprogramuvannya Deyaki realizaciyi Prologu osoblivo SWI Prolog ta Ciao pidtrimuyut vebprogramuvannya na servernomu boci z pidtrimkoyu vebprotokoliv HTML ta XML Isnuyut takozh rozshirennya dlya pidtrimki formativ semantichnoyi pavutini takih yak RDF ta OWL Prolog takozh proponuvalasya yak mova kliyentskogo boku Adobe Flash Cedar ye bezkoshtovnim ta elementarnim interpretatorom Prologu Vid versiyi 4 ta vishe Cedar maye pidtrimku FCA Flash Cedar App Ce zabezpechuye novu platformu dlya programuvannya Prologom cherez ActionScript Inshi en rozshiryuye Prolog frejmami ob yektami dlya predstavlennya znan en rozshiryuye Prolog teoriyeyu logiki operatoriv onovlennya sho zminyuyut stan Vona maye yak teoretiko modelnu tak i procedurnu semantiku bulo stvoreno shobi dati vidpovid na brak grafiki ta interfejsu v Prolozi Interfejsi do inshih movIsnuyut karkasi dlya spoluchennya mizh Prologom ta inshimi movami LPA Intelligence Server dozvolyaye vklyuchennya LPA Prolog do C C C Java VB Delphi NET Lua Python ta inshih mov Vin vikoristovuye specialnij strichkovij tip danih sho nadaye LPA Prolog Logic Server API dozvolyaye yak rozshirennya Prologom tak i jogo vklyuchennya do C C Java VB Delphi NET ta bud yakih inshih mov seredovish sho mozhut viklikati dll abo so Jogo realizovano dlya Amzi Prolog Logic Server ale specifikaciyu API mozhe buti zrobleno dostupnoyu dlya bud yakoyi realizaciyi JPL ce dvospryamovanij mist mizh Java ta Prologom sho postachayetsya z SWI Prolog za zamovchuvannyam i sho dozvolyaye Java ta Prologovi viklikati odne odnogo rekursivno Vin vidomij garnoyu pidtrimkoyu paralelnosti ta znahoditsya v aktivnij rozrobci programna biblioteka mostu mizh Java ta Prologom sho realizuye dvospryamovani vikliki predikativ metodiv mizh oboma movami Ob yekti Java mozhut vidobrazhatisya u termi Prologu i navpaki Dozvolyaye rozrobku grafichnogo interfejsu koristuvacha ta inshoyi funkcionalnosti v Java zalishayuchi obrobku logiki v shari Prologu Pidtrimuye XSB iz zaplanovanoyu na 2013 rik pidtrimkoyu SWI Prolog ta YAP en nadaye integraciyu ridnogo sintaksisu z Java obmin povidomlennyami mizh programnimi agentami ta pravila reakciyi Prova pozicionuye sebe yak skriptovu sistemu na bazi pravil angl rule based scripting RBS dlya pidprogramnogo zabezpechennya Cya mova vidkrivaye novi obriyi u poyednanni imperativnogo ta deklarativnogo programuvannya ce vbudovuvanij rushij Prologu dlya Java Vin vklyuchaye nevelike integrovane seredovishe rozrobki ta dekilka bibliotek GNU Prolog dlya Java ye realizaciyeyu Prologu ISO yak biblioteki Java gnu prolog en nadaye interfejsi do C C Java ta relyacijnih baz danih C Prolog ye interpretatorom Prologu napisanim kerovanoyu C Mozhe legko integruvatisya do program movoyu C Harakteristiki nadijnij ta dosit shvidkij interpretator interfejs komandnogo ryadka interfejs Windows vbudovana gramatika viznachenih tverdzhen XML predikati SQL predikati rozshiryuvanij Dostupnij povnij dzherelnij kod vklyuchno z generatorom sintaksichnogo analizatora sho mozhe buti vikoristano dlya dodavannya rozshiren osoblivogo priznachennya Jekejeke Prolog API nedostupne posilannya z kvitnya 2019 nadaye silnozv yazani mozhlivosti paralelnih vhidnih ta vihidnih viklikiv mizh Prologom ta Java abo Android z viznachnoyu mozhlivistyu stvorennya individualnih ob yektiv baz znan Vin mozhe zastosovuvatisya dlya vbudovuvannya Prologu ISO do samostijnih zastosunkiv apletiv servletiv APK tosho Abstraktna mashina Vorrena dlya PHP kompilyator ta interpretator Prologu v PHP 5 3 Biblioteka sho mozhe vikoristovuvatisya samostijno abo z karkasom Symfony2 1 IstoriyaNazvu Prolog fr Prolog bulo obrano fr yak abreviaturu vid programuvannya v logici fr programmation en logique Prolog bulo stvoreno v 1972 roci en z Filipom Russelem na osnovi procedurnoyi interpretaciyi diz yunktiv Gorna Roberta Kovalskogo Ce bulo chastkovo motivovane bazhannyam primiriti vikoristannya logiki yak movi deklarativnogo predstavlennya znan z procedurnim predstavlennyam znan sho bulo populyarne v Pivnichnij Americi naprikinci 1960 h i na pochatku 1970 h rokiv Zgidno Roberta Kovalskogo pershu prologovu sistemu bulo rozrobleno v 1972 roci Alanom Kolmeroe ta Filipom Russelem Pershi realizaciyi Prologu buli interpretatorami Odnak en stvoriv en rannij ta vplivovij kompilyator Prologu sho prijshov shobi viznachiti Edinburzkij dialekt Prologu sho posluzhiv osnovoyu sintaksisu bilshosti suchasnih realizacij Yevropejski doslidniki shtuchnogo intelektu viddavali perevagu Prologu todi yak amerikanci viddavali perevagu Lispu sho yak povidomlyalosya prizvodilo do chislennih nacionalistichnih debativ pro perevagi cih mov Bilshist suchasnih rozrobok Prologu pishli vid poshtovhu proektu komp yuternih sistem p yatoyi generaciyi v ramkah yakogo bulo rozrobleno variant Prologu pid nazvoyu en dlya jogo pershoyi operacijnoyi sistemi Chistu Prolog bulo spochatku obmezheno vikoristannyam sistemi dovedennya teorem z diz yunktami Gorna formi G T1 Tn Zastosunok sistemi dovedennya teorem obroblyaye taki tverdzhennya yak proceduri shobi pokazati rozv yazati G pokazhi rozv yazhi T1 ta ta Tn Odnak chistu Prolog nezabarom bulo rozshireno vklyuchennyam zaperechennya yak vidmovi v yakomu zaperechni umovi formi not Ti pokazuyutsya shlyahom sprobi i nevdachi dovedennya vidpovidnih pozitivnih umov Ti Podalshi rozshirennya Prologu originalnoyu komandoyu vveli do realizacij mozhlivosti en Vikoristannya u promislovostiProlog vikoristovuvalasya v komp yuternij sistemi Watson Watson vikoristovuye programne zabezpechennya DeepQA kompaniyi IBM ta programnij karkas Apache en angl Unstructured Information Management Architecture Arhitektura Keruvannya Nestrukturovanoyu Informaciyeyu Cyu sistemu bulo napisano bagatma movami vklyuchno z Java C ta Prolog vona pracyuye na operacijnij sistemi en 11 z vikoristannyam programnogo karkasa Apache Hadoop dlya zabezpechennya rozpodilenih obchislen Prolog vikoristovuyetsya dlya zistavlennya zi zrazkami nad sintaksichnimi derevami prirodnoyi movi Rozrobniki ciyeyi sistemi zayavili Mi potrebuvali movi yakoyu mi mogli bi zruchno virazhati pravila zistavlennya zi zrazkami nad sintaksichnimi derevami ta inshimi tlumachennyami takimi yak rezultati rozpiznavannya imenovanih sutnostej i tehnologiyi zdatnoyi vikonuvati ci pravila duzhe efektivno Mi viyavili sho Prolog bula idealnim viborom takoyi movi cherez svoyu prostotu ta viraznist Originalnij tekst angl We required a language in which we could conveniently express pattern matching rules over the parse trees and other annotations such as named entity recognition results and a technology that could execute these rules very efficiently We found that Prolog was the ideal choice for the language due to its simplicity and expressiveness Div takozh en en Metod pobudovi sistem na osnovi znan sho vikoristovuye Prolog Programuvannya naborami vidpovidej Povnistyu deklarativnij pidhid do logichnogo programuvannya en Sporidneni movi Mova en ye suvoro tipizovanoyu realizaciyeyu en Yiyi pobudovano na bazi SICStus Prolog en ranishe vidoma yak PDC Prolog ta Turbo Prolog ye suvoro tipizovanim ob yektno oriyentovanim dialektom Prologu sho duzhe silno vidriznyayetsya vid standartnoyi Prolog Yak Turbo Prolog vona prosuvalasya kompaniyeyu Borland ale teper vona rozroblyayetsya ta prosuvayetsya danskoyu firmoyu PDC Prolog Development Center yaka yiyi spochatku i stvorila Datalog ye pidmnozhinoyu Prologu Vona obmezhena vidnoshennyami sho mozhut stratifikovuvatisya i ne dozvolyaye skladenih termiv Na vidminu vid Prologu Dalalog ne ye povnoyu za Tyuringom en ye vidgaluzhennyam vid Prologu spryamovanim na i maye statichnu polimorfnu sistemu tipizaciyi a takozh sistemu rezhimiv ta determinizmu en en ye vlasnoyu realizaciyeyu abstraktnoyi mashini Vorrena z dodatkovimi ob yektno oriyentovanimi vlastivostyami U pevnomu sensi yakomu Prolog ye pidmnozhinoyu movi Planner Piznishe ideyi movi Planner bulo rozvinuto u en ye variantom Prologu dlya programuvannya povedinki agentiv u bagatoagentnih sistemah Erlang pochala zhittya z realizaciyi na bazi Prologu i zberigaye bilshist sintaksisu Prologu na bazi ob yednan PrimitkiClocksin William F Mellish Christopher S 2003 Programming in Prolog Berlin New York Springer Verlag ISBN 978 3 540 00678 7 angl Bratko Ivan 2001 Prolog programming for artificial intelligence Harlow England New York Addison Wesley ISBN 0 201 40375 7 angl Covington Michael A 1994 Natural language processing for Prolog programmers Englewood Cliffs N J Prentice Hall ISBN 978 0 13 629213 5 angl Lloyd J W 1984 Foundations of logic programming Berlin Springer Verlag ISBN 3 540 13299 6 angl Kowalski R A 1988 The early years of logic programming PDF Communications of the ACM 31 38 doi 10 1145 35043 35046 angl Colmerauer A Roussel P 1993 The birth of Prolog PDF ACM SIGPLAN Notices 28 3 37 doi 10 1145 155360 155362 angl Div Logichne programuvannya Istoriya Stickel M E 1988 A prolog technology theorem prover Implementation by an extended prolog compiler Journal of Automated Reasoning 4 4 353 380 doi 10 1007 BF00297245 angl Merritt Dennis 1989 Building expert systems in Prolog Berlin Springer Verlag ISBN 0 387 97016 9 angl Fernando C N Pereira Stuart M Shieber 2005 Prolog and Natural Language Analysis Microtome angl Adam Lally Paul Fodor 31 bereznya 2011 Association for Logic Programming Arhiv originalu za 3 veresnya 2014 Procitovano 31 serpnya 2014 angl Div takozh IBM Watson Covington Michael A Bagnara Roberto Wielemaker Jan Price Simon 2011 Coding guidelines for Prolog Theory and Practice of Logic Programming 12 6 889 927 arXiv 0911 2899 doi 10 1017 S1471068411000391 angl Kirschenbaum M Sterling L S 1993 Applying Techniques to Skeletons Constructing Logic Programs ed J M J Jacquet 27 140 angl Sterling Leon 2002 Patterns for Prolog Programming Computational Logic Logic Programming and Beyond Lecture Notes in Computer Science Lecture Notes in Artificial Intelligence T 2407 s 17 26 doi 10 1007 3 540 45628 7 15 ISBN 978 3 540 43959 2 angl D Barker Plummer Cliche programming in Prolog In M Bruynooghe editor Proc Second Workshop on Meta Programming in Logic pages 247 256 Dept of Comp Sci Katholieke Univ Leuven 1990 angl Gegg harrison T S 1995 Representing Logic Program Schemata in Prolog Procs Twelfth International Conference on Logic Programming s 467 481 angl Deville Yves 1990 Logic programming systematic program development Wokingham England Addison Wesley ISBN 0 201 17576 2 angl Naish Lee 1996 Higher order logic programming in Prolog Department of Computer Science University of Melbourne procitovano 2 listopada 2010 angl With regard to Prolog variables variables only in the head are implicitly universally quantified and those only in the body are implicitly existentially quantified Procitovano 04 travnya 2013 angl ISO IEC 13211 Information technology Programming languages Prolog International Organization for Standardization Geneva angl ISO IEC 13211 2 Modules angl Paulo Moura Logtalk in Association of Logic Programming Newsletter Vol 17 n 3 August 2004 1 2010 04 12 u Wayback Machine angl Shapiro Ehud Y Sterling Leon 1994 The art of Prolog advanced programming techniques Cambridge Mass MIT Press ISBN 0 262 19338 8 angl Ed Dbali A Deransart Pierre Cervoni L 1996 Prolog the standard reference manual Berlin Springer ISBN 3 540 59304 7 angl ISO IEC 13211 1 1995 Cor 1 2007 angl ISO IEC 13211 1 1995 Cor 2 2012 angl WG17 Working Group 24 zhovtnya 2009 u Wayback Machine angl X3J17 Committee 23 serpnya 2009 u Wayback Machine angl David H D Warren An abstract Prolog instruction set Technical Note 309 SRI International Menlo Park CA October 1983 angl Van Roy P Despain A M 1992 High performance logic programming with the Aquarius Prolog compiler Computer 25 54 doi 10 1109 2 108055 angl Graf Peter 1995 Term indexing Springer ISBN 978 3 540 61040 3 angl Wise Michael J Powers David M W 1986 Indexing Prolog Clauses via Superimposed Code Words and Field Encoded Words International Symposium on Logic Programming s 203 210 angl Colomb Robert M 1991 Enhancing unification in PROLOG through clause indexing The Journal of Logic Programming 10 23 doi 10 1016 0743 1066 91 90004 9 angl Swift T 1999 Tabling for non monotonic programming Annals of Mathematics and Artificial Intelligence 25 3 4 201 200 doi 10 1023 A 1018990308362 angl Zhou Neng Fa Sato Taisuke 2003 Efficient Fixpoint Computation in Linear Tabling PDF Proceedings of the 5th ACM SIGPLAN International Conference on Principles and Practice of Declarative Programming 275 283 angl Swift T Warren D S 2011 XSB Extending Prolog with Tabled Logic Programming Theory and Practice of Logic Programming 12 157 doi 10 1017 S1471068411000500 angl Abe S Bandoh T Yamaguchi S Kurosawa K Kiriyama K 1987 High performance integrated Prolog processor IPP Proceedings of the 14th annual international symposium on Computer architecture ISCA 87 s 100 doi 10 1145 30350 30362 ISBN 0818607769 angl Robinson Ian 1986 A Prolog processor based on a pattern matching memory device Third International Conference on Logic Programming Lecture Notes in Computer Science T 225 Springer s 172 179 doi 10 1007 3 540 16492 8 73 ISBN 978 3 540 16492 0 angl Taki K Nakajima K Nakashima H Ikeda M 1987 Performance and architectural evaluation of the PSI machine ACM SIGPLAN Notices 22 10 128 doi 10 1145 36205 36195 angl Gupta G Pontelli E Ali K A M Carlsson M Hermenegildo M V 2001 Parallel execution of prolog programs a survey ACM Transactions on Programming Languages and Systems 23 4 472 doi 10 1145 504083 504085 angl http www cl cam ac uk am21 research sa byrdbox ps gz angl Logic programming for the real world Zoltan Somogyi Fergus Henderson Thomas Conway Richard O Keefe Proceedings of the ILPS 95 Postconference Workshop on Visions for the Future of Logic Programming angl The Prolog 1000 database http www faqs org faqs prolog resource guide part1 section 9 html angl Jan Wielemaker and Vitor Santos Costa Portability of Prolog programs theory and case studies CICLOPS WLPE Workshop 2010 2010 07 16 u Wayback Machine angl Kiselyov Oleg Kameyama Yukiyoshi 2014 Re thinking Prolog Proc 31st meeting of the Japan Society for Software Science and Technology angl Torkel Franzen 1994 Declarative vs procedural Association of Logic Programming Newsletter Vol 7 3 angl Dantsin Evgeny Eiter Thomas Gottlob Georg Voronkov Andrei 2001 Complexity and Expressive Power of Logic Programming ACM Computing Surveys 33 3 374 425 doi 10 1145 502807 502810 angl Mycroft A O Keefe R A 1984 A polymorphic type system for prolog Artificial Intelligence 23 3 295 doi 10 1016 0004 3702 84 90017 1 angl Pfenning Frank 1992 Types in logic programming Cambridge Mass MIT Press ISBN 0 262 16131 1 angl Schrijvers Tom Santos Costa Vitor Wielemaker Jan Demoen Bart 2008 Towards Typed Prolog U Maria Garcia de la Banda Enrico Pontelli red Logic programming 24th international conference ICLP 2008 Udine Italy December 9 13 2008 proceedings Lecture Notes in Computer Science T 5366 s 693 697 doi 10 1007 978 3 540 89982 2 59 ISBN 9783540899822 angl Apt K R Marchiori E 1994 Reasoning about Prolog programs From modes through types to assertions Formal Aspects of Computing 6 6 743 doi 10 1007 BF01213601 angl O Keefe Richard A 1990 The craft of Prolog Cambridge Mass MIT Press ISBN 0 262 15039 5 angl Michael Covington ta in 2010 Coding guidelines for Prolog arXiv 0911 2899 cs PL angl Roy P Demoen B Willems Y D 1987 Improving the execution speed of compiled Prolog with modes clause selection and determinism Tapsoft 87 Lecture Notes in Computer Science T 250 s 111 doi 10 1007 BFb0014976 ISBN 3 540 17611 X angl Jaffar J 1994 Constraint logic programming a survey The Journal of Logic Programming 19 20 503 581 doi 10 1016 0743 1066 94 90033 7 angl Colmerauer Alain 1987 Opening the Prolog III Universe Byte August angl Wallace M 2002 Constraint Logic Programming Computational Logic Logic Programming and Beyond Lecture Notes in Computer Science T 2407 s 512 556 doi 10 1007 3 540 45628 7 19 ISBN 3540456287 angl XPCE graphics library Arhiv originalu za 25 chervnya 2013 Procitovano 10 grudnya 2012 angl prolog mpi Apps lumii lv Arhiv originalu za 25 chervnya 2013 Procitovano 16 veresnya 2010 angl Ehud Shapiro The family of concurrent logic programming languages en September 1989 angl Wielemaker J Huang Z Van Der Meij L 2008 SWI Prolog and the web Theory and Practice of Logic Programming 8 03 doi 10 1017 S1471068407003237 angl Jan Wielemaker and Michiel Hildebrand and Jacco van Ossenbruggen 2007 S Heymans A Polleres E Ruckhaus D Pearse and G Gupta red Using Prolog as the fundament for applications on the semantic web PDF Proceedings of the 2nd Workshop on Applications of Logic Programming and to the web Semantic Web and Semantic Web Services CEUR Workshop Proceedings Porto Portugal CEUR WS org t 287 s 84 98 angl Processing OWL2 Ontologies using Thea An Application of Logic Programming Vangelis Vassiliadis Jan Wielemaker and Chris Mungall Proceedings of the 5th International Workshop on OWL Experiences and Directions OWLED 2009 Chantilly VA United States October 23 24 2009 angl Loke S W Davison A 2001 Secure Prolog based mobile code Theory and Practice of Logic Programming 1 doi 10 1017 S1471068401001211 angl Pountain Dick Zhovten 1984 POP and SNAP BYTE s 381 Procitovano 23 zhovtnya 2013 angl LiteraturaBlackburn Patrick Bos Johan Striegnitz Kristina 2006 Learn Prolog Now ISBN 1 904987 17 6 angl en Algoritmy iskusstvennogo intellekta na yazyke PROLOG M SPb K Vilyams 2004 640 s ISBN 5 8459 0664 4 ros Clocksin W F Programming in Prolog Using the ISO Standard Mellish C S Vid 5 Springer 2003 299 s ISBN 978 3 540 00678 7 Ce vidannya onovleno dlya Prologu ISO Poperedni vidannya opisuvali Edinburzku Prolog angl Clocksin W F Clause and Effect Prolog Programming for the Working Programmer Springer 2003 152 s ISBN 978 3 540 62971 9 angl Covington M A Prolog Programming in Depth Nute D Vellino A 1996 516 s ISBN 0 13 138645 X angl Covington M A Natural Language Processing for Prolog Programmers 1994 348 s ISBN 978 0 13 629213 5 angl M S Dawe and C M Dawe Prolog for Computer Sciences Springer Verlag 1992 angl ISO IEC 13211 Information technology Programming languages Prolog Geneva International Organization for Standardization angl Feliks Kluzniak and Stanislaw Szpakowicz with a contribution by Janusz S Bien Prolog for Programmers Academic Press Inc London 1985 1987 dostupna pid licenziyeyu Creative Commons na https sites google com site prologforprogrammers ISBN 0 12 416521 4 angl en The Craft of Prolog 387 s ISBN 0 262 15039 5 angl Robert Smith John Gibson en POPLOG s two level virtual machine support for interactive languages in Research Directions in Cognitive Science Volume 5 Artificial Intelligence Eds D Sleeman and N Bernsen Lawrence Erlbaum Associates pp 203 231 1992 angl en Iskusstvo programmirovaniya na yazyke Prolog en M Mir 1990 333 s ISBN 5 03 000406 8 ros Warren D H D Prolog the language and its implementation compared with Lisp Pereira L M Pereira F ACM SIGART Bulletin archive Issue 64 Proceedings of the 1977 symposium on Artificial intelligence and programming languages s 109 115 angl Trushevskij V M Tehnologiyi ta movi programuvannya dlya shtuchnogo intelektu Chastina 1 Osnovi programuvannya movoyu Prolog Lviv 2006 120 s PosilannyaVikipidruchnik maye knigu na temu Prolog comp lang prolog FAQ angl Posibnik koristuvacha Prologu DECsystem 10 tekstovij format opisuye tipovu Edinburzku Prolog angl vid J R Fisher angl Vikonuvani prikladi vid Lloyd Allison angl On line guide to Prolog Programming vid Roman Bartak angl Learn Prolog Now vid Patrick Blackburn Johan Bos ta Kristina Striegnitz angl fr Prolog and Logic Programming vid Dr Peter Hancox angl Adventure in Prolog navchalnij internet posibnik vid Dennis Merritt angl Building Expert Systems in Prolog internet kniga vid Dennis Merritt angl Literate programming in Prolog angl Amzi Prolog Logic Server vid Dennis Merritt angl Prolog Tutorial I nedostupne posilannya z kvitnya 2019 vid Klajva Spensera LPA angl Prolog Tutorial II nedostupne posilannya z kvitnya 2019 vid Klajva Spensera LPA angl JIProlog vid Ugo Kiriko angl Progopedia Prolog ros