Dlaczego (nie) programowanie logiki?

13

Nie słyszałem jeszcze o żadnym zastosowaniu logicznego języka programowania (takiego jak Prolog) w branży oprogramowania, ani nie znam jego zastosowania w programowaniu hobbystycznym lub projektach open source. Jednak (Prolog) jest do pewnego stopnia używany jako język akademicki (dlaczego jest używany w środowisku akademickim?).

Zastanawiam się, dlaczego warto korzystać z programowania logicznego, a dlaczego nie? Dlaczego nie uzyskuje żadnego wykrywalnego użycia w branży?

Anto
źródło

Odpowiedzi:

8

Poza środowiskiem akademickim ... Słyszałem o tym, że używa się go częściej w AI, czasem w grach (słyszałem, że napędzało AI w serii Black & White). Słyszałem również o odmianach używanych do uruchamiania mechanizmów reguł dla niektórych firm i symulacji ekonomicznych.

Moje przypuszczenia z powodu braku powszechnej adopcji to:

  • To dziwne - większość ludzi nie jest przyzwyczajona do programowania i mogą robić to, czego potrzebują w innych językach.
  • Brak wsparcia ze strony dostawcy - jeśli Microsoft nagle zaczął wypychać Prolog # (z pełną wagą biblioteki .NET i zestawu narzędzi oraz formalnego wsparcia za nią) jako The Next Big Thing - a wtedy IBM i Oracle wymyśliły coś do konkurowania, założę się, że zobaczę, jak odbierze!
  • Brak integracji - nie wiem, jakie biblioteki są dostępne dla Prologu - ostatnio sprawdziłem, czy nie ma zbyt wielu bibliotek graficznych lub sieciowych, co oznacza, że ​​„aplikacja” Prolog musi być zapakowana w inną aplikację, która współdziała z resztą świat.
FrustratedWithFormsDesigner
źródło
„aplikacja Prolog” musi być zapakowana w inną aplikację, która współdziała z resztą świata ”. To była dla nas funkcja. Możemy łatwiej wyodrębnić bity prologu, ponieważ interfejs do niego był tak prosty.
S.Lott,
@ S.Lott: Ok, widzę to również jako coś pozytywnego, chociaż kiedy byłem w szkole i chciałem złożyć aplikację w Prologu, uznałem, że hydraulika i okablowanie między elementami są dużym wyzwaniem i przeszkodą.
FrustratedWithFormsDesigner
5

Użyliśmy go do budowy parserów. Łatwiej było pracować z lex / yacc.

Dlaczego nie uzyskuje żadnego wykrywalnego użycia w branży?

To jest bez odpowiedzi. Co oznacza „wykrywalny”? Kto musi otrzymać notatkę z wykrycia?

http://www.meridiansystems.com/landing/ppc/prolog/getvideo.asp

Zapytaj Meridian Software o ofertę prologu, jeśli chcesz poznać fakty.

Istnieją jednak pewne bariery wejścia, które napotkałem.

Po pierwsze, prolog może być powolny. Gdy istnieje wiele reguł kandydujących i nie ma prostych operacji cięcia, aby ograniczyć przestrzeń wyszukiwania, wykonanie zadania może trochę potrwać.

Po drugie, prolog nie jest proceduralny ani funkcjonalny, więc wielu programistów nie chce z niego korzystać. (Co ciekawe, niektórzy programiści nie zgadzają się na używanie SQL. W związku z tym niektórzy programiści niechętnie używają SQL i robią dziwne rzeczy, takie jak unikanie operacji łączenia lub twierdzenie, że COUNT(*)jest to magicznie nieefektywne).

Po trzecie, prolog wymaga dość jasnego przemyślenia, jakie są poszczególne przypadki. Programowanie proceduralne może być niechlujne i nadal działać niezawodnie. Niewykonalne instrukcje są dopuszczalne.

W większości kręgów dopuszczalne są następujące elementy.

b = a + 1
if a > b: # always False

Tego rodzaju mroczne myślenie wpada w kłopoty z prologiem.

S.Lott
źródło
2

Jednym z problemów jest to, że Prolog tak naprawdę nie programuje w logice predykatów pierwszego rzędu, która jest trudna do obliczeń (nie pamiętam do jakiego stopnia, ale nie jest to w NP, a jeśli dodasz do niej arytmetykę, to formalnie jest nierozstrzygalna). Dlatego jest to uproszczenie.

Logicznie, twierdzenie może zostać udowodnione jako prawdziwe, udowodnione jako fałszywe lub nie udowodnione w żaden sposób. Prolog tylko udowodnił i nie udowodnił, „nie udowodniono” zwykle oznacza fałsz. Ponadto kolejność klauzul Prolog może wpływać na wykonanie, co nie ma miejsca w przypadku klauzul logicznych. W trakcie jego używania zacząłem myśleć o Prologu jako o języku bardziej dopasowanym do wzorców niż o języku logicznym.

Dlatego programowanie Prologu zależy nie tyle od poprawności logicznej, co sam język Prologu. Jest to użyteczny język pod pewnymi względami, ale nigdzie nie jest blisko głównego nurtu i nie ma narzędzi i korzyści dla społeczności takich jak C ++.

David Thornley
źródło