Dlaczego reguły nie są napisane w prologu? [Zamknięte]

16

Z tego, co widziałem w Prologu, wydaje się, że byłby idealny do stworzenia silnika reguł dla aplikacji. Jednak nie sądzę, żebym kiedykolwiek widział silnik reguł napisany w Prologu. Czy jest jakieś nieodłączne ograniczenie w Prologu (np. Słaby algorytm zbierania śmieci), które uniemożliwiałyby jego wykorzystanie do budowy silnika reguł?

Onorio Catenacci
źródło
7
Drabina. (prawie) nikt nie zna prologu, a jeszcze więcej deweloperów nie chce wiedzieć niczego, co nie pozwala im na codzienną pracę, aby mogli wrócić do domu. Niestety, Prolog jest całkiem fajny.
Jimmy Hoffa,
3
Prolog robi jednak świetne edsl. Osadzanie prologu w języku takim jak Haskell lub Scheme to podejście, które zwykle
wybieram
3
@ JimmyHoffa To maleje. Niektórzy ludzie uczą się prologu, a następnie próbują proaktywnie zapomnieć o nim do końca życia zawodowego.
ZJR
5
Widzę 3 bliskie głosy - czy ktoś chce mi powiedzieć, co jest nie tak z pytaniem, żebym mógł to naprawić lub wycofać?
Onorio Catenacci
2
Głosowałem za zamknięciem jako „głównie oparte na opiniach”. Jeśli możesz mnie przekonać inaczej, wycofam mój głos. Osobiście uznałem, że Prolog jest nieprzejrzysty; Spodziewałbym się, że silnik reguł będzie miał bardziej intuicyjną składnię do definiowania reguł. I jest to język programowania, a nie prototyp składni dla silnika reguł per se.
Robert Harvey

Odpowiedzi:

14

Silniki reguł w początkowej fazie były pisane prawie wyłącznie w Prologu - był to język logiczny. Przy niewielkim zestawie reguł działali świetnie. Okazało się jednak, że nie skalowały się zbyt dobrze. Nie mam definitywnego odniesienia, ale rozumiem, że sposób, w jaki Prolog radzi sobie z łańcuchem reguł, jest nieefektywny - model rekurencyjny stworzony do tworzenia bardzo dużych stosów, które doprowadziły go do pełzania.

Opracowanie algorytmu RETE i jego następców pozwoliło na bardziej efektywny sposób przetwarzania dużych ilości reguł, a więc przejęło.

Być może współczesny prolog byłby bardziej wydajny niż w latach 80., kiedy wykonano większość wczesnych prac.

Matthew Flynn
źródło
Zobacz także: stackoverflow.com/questions/3364191/…
Matthew Flynn
1
Kolejny artykuł na ten temat: haleyai.com/wordpress/2013/06/22/…
Matthew Flynn
Szalone pytanie. Czy ludzie nie wdrożyli RETE w prologu, dzięki czemu uzyskali najlepsze z obu słów? (jest wiele rzeczy, których RETE nie robi, tak jak prolog).
user48956
14

Zuchwała odpowiedź: ponieważ jeśli twórcy Reguł Silników wiedzieliby o Prologu (lub Merkurego, PLANERA lub…), nie pisaliby Silników Reguł, używaliby Prologu.

Jörg W Mittag
źródło
5

Generalnie chodzi o to, że silnik reguł jest częścią innej aplikacji. Rzadko widuje się aplikacje napisane w Prologu i nie ma powszechnie dostępnego interfejsu do łączenia Prologu z aplikacjami napisanymi w innych językach.

Jednym z narzędzi opartych na regułach dla mechanizmów reguł, które jest napisane w celu dodania do innych aplikacji, jest CLIPS . CLIPS został oparty na OPS5 i wykorzystuje algorytm Rete do reguł przycinania.

Tangurena
źródło
nie do końca prawda, istnieją pewne interfejsy od programów zewnętrznych do kodu Prolog. SWI-Prolog ma interfejs C ++ i sposób na połączenie się z R.
Rudolf Olah
3
Właściwie wszystkie silniki prologów, które widziałem, pracują z C lub C ++, ponieważ „nikt” nie używa Proologa dla kompletnych aplikacji, ale „wszyscy” mają sposoby wywoływania funkcji C w celu wywoływania wyspecjalizowanych bibliotek. tj. GNU Prolog gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes
Dzięki za ten wskaźnik @ johannes. W ogóle nie byłem świadomy GNU Prolog; tym bardziej, że można go wywołać z C.
Onorio Catenacci
Zobacz także: swi-prolog.org
user48956