Почему движки с правилами не написаны на прологе? [закрыто]

16

Из того, что я видел в Прологе, кажется, что он идеально подходит для создания движка правил для приложения. Тем не менее, я не верю, что когда-либо видел механизм правил, написанный на Прологе. Есть ли в Прологе некоторое внутреннее ограничение (например, плохой алгоритм сборки мусора), которое не позволило бы использовать его для создания механизма правил?

Онорио Катеначчи
источник
7
Лестница. (почти) никто не знает пролог, и даже больше разработчиков не хотят знать ничего, что не выполняет их ежедневную работу, чтобы они могли идти домой. К сожалению, Пролог довольно крутой.
Джимми Хоффа
3
Пролог делает отличный Эдсл, хотя. Встраивание пролога в язык, такой как Haskell или Scheme, - это подход, который я обычно использую
Daniel Gratzer
3
@JimmyHoffa Это уменьшается. Некоторые люди изучают пролог, а затем пытаются забывать проактивно до конца своей трудовой жизни.
ZJR
5
Я вижу 3 близких голоса - кто-нибудь захочет сказать мне, что не так с вопросом, чтобы я мог его исправить или отозвать?
Онорио Катеначчи
2
Я проголосовал за то, чтобы закрыться как «в первую очередь основанный на мнении». Если вы можете убедить меня в обратном, я откажусь от своего закрытого голосования. Я лично нашел Пролог непрозрачным; Я ожидаю, что механизм правил будет иметь более интуитивный синтаксис для определения правил. И это язык программирования, а не синтаксис прототип двигателя для правил в себе.
Роберт Харви

Ответы:

14

Правила двигателей в зачаточном состоянии были написаны почти исключительно на прологе - это был логичный язык. Для небольшого набора правил они работали отлично. Однако оказалось, что они не очень хорошо масштабируются. У меня нет точной ссылки, но я понимаю, что способ, которым Prolog обрабатывает цепочку правил, неэффективен - рекурсивная модель, созданная для создания очень больших стеков, которая привела к ползанию.

Разработка алгоритма RETE и его преемников позволила более эффективно обрабатывать большое количество правил, что и привело к победе.

Возможно, современный пролог был бы более эффективным, чем в 80-х годах, когда большая часть ранней работы была выполнена.

Мэтью Флинн
источник
См. Также: stackoverflow.com/questions/3364191/…
Мэтью Флинн
1
Другая статья, касающаяся этого: haleyai.com/wordpress/2013/06/22/…
Мэтью Флинн
Безумный вопрос. Разве люди не внедрили RETE в пролог, получив тем самым лучшее из обоих слов? (есть много того, что RETE не делает, что делает пролог).
user48956
14

Ответ "язык в щеке": потому что, если бы создатели систем правил знали о Prolog (или Mercury, или PLANNER, или ...), они не писали бы правила, они использовали бы Prolog.

Йорг Миттаг
источник
5

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

Одним из основанных на правилах инструментов для механизмов правил, написанным для добавления в другие приложения, является CLIPS . CLIPS был основан на OPS5 и использует алгоритм Rete для сокращения правил.

Tangurena
источник
не совсем верно, есть некоторые интерфейсы от внешних программ к коду Пролога. SWI-Prolog имеет интерфейс C ++ и способ подключения к R.
Rudolf Olah
3
Фактически все прологи, которые я видел, работают с C или C ++, так как «никто» не использует Proolog для законченных приложений, но у «всех» есть способы вызывать функции C для вызова специализированных библиотек. т.е. GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
Йоханнес
Спасибо за этот указатель @johannes. Я вообще не знал о GNU Prolog; не говоря уже о том, что его можно назвать из С.
Онорио Катеначчи
Также смотрите: swi-prolog.org
user48956