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?
Użyliśmy go do budowy parserów. Łatwiej było pracować z lex / yacc.
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.
Tego rodzaju mroczne myślenie wpada w kłopoty z prologiem.
źródło
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 ++.
źródło