Чому правильні двигуни не записуються в пролог? [зачинено]


16

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


7
Сходи. (майже) ніхто не знає пролог, а ще більше чортів не хочуть знати нічого, що не робить їх щоденну роботу, щоб вони могли піти додому. На жаль, Пролог досить крутий.
Джиммі Хоффа

3
Пролог, однак, чудовий edsl. Вкладення prolog такою мовою, як Haskell або Scheme - це підхід, який я зазвичай беру
Daniel Gratzer

3
@JimmyHoffa Це зменшує. Деякі люди вивчають пролог, а потім намагаються проактивно забути його до кінця свого трудового життя.
ZJR

5
Я бачу 3 закритих голоси - хтось не хоче мені сказати, що не так у питанні, щоб я міг його виправити чи зняти?
Оноріо Катенач

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

Відповіді:


14

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

Розробка алгоритму RETE та його наступників дозволила ефективніше обробляти велику кількість правил, і тому перейняла.

Можливо, сучасний пролог виявиться більш ефективним, ніж ще в 80-х, коли було зроблено більшу частину ранньої роботи.



1
Ще одна стаття, що стосується цього: haleyai.com/wordpress/2013/06/22/…
Меттью Флінн

Божевільне запитання. Хіба люди не впроваджували RETE в пролозі, тим самим отримуючи найкраще з обох слів? (є багато, що RETE не робить, що робить пролог).
user48956

14

Відповідь язика в щоку: оскільки, якби творці Правила двигунів знали про Prolog (або Меркурій, ПЛАНЕР або…), вони б не писали правила Engines, вони використовували б Prolog.


5

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

Одним з інструментів для двигунів на основі правил, який написано для додавання до інших програм, є CLIPS . CLIPS базувався на OPS5 і використовує алгоритм Rete для правил обрізки.


не зовсім вірно, є деякі інтерфейси від зовнішніх програм до коду Prolog. SWI-Prolog має інтерфейс C ++ та спосіб підключення до Р.
Рудольф Олах

3
Насправді всі двигуни прологів, які я бачив, працюють з C або C ++, оскільки "ніхто" не використовує Proolog для повних програм, але "всі" мають способи викликати функції C для виклику спеціалізованих ліб. тобто GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes

Дякую за цей покажчик @johannes. Я взагалі не знав про GNU Prolog; набагато менше того, що його можна назвати від C.
Оноріо Катенач

Також дивіться: swi-prolog.org
user48956
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.