Najlepsza odpowiedź
Emacs do końca!
W przypadku poważnego rozwoju Prologu polecam GNU Emacs z trybem Prologu, który jest obsługiwany przez Stefana Brudę. Strona główna SWI-Prolog wyjaśnia, jak go skonfigurować, a także zawiera wskazówki do dalszych materiałów:
Używanie SWI-Prolog z GNU Emacs
W rzeczywistości SWI-Prolog jest dostarczany nawet z własnym klonem Emacsa, który jest przydatny w przypadku mniejszych zadań edycyjnych. Możesz go wywołać za pomocą? – emacs.
Aby uzyskać kilka alternatywnych sugestii, zapoznaj się z tą dyskusją:
Co jest dobre Prolog IDE dla Linuksa?
Odpowiedź
Prolog nie umiera. Ogólnie rzecz biorąc, uczy go każdy student Comp Sci przygotowujący się do doktoratu! Jednak Twoje pytanie może być w częściowo ze względu na fakt, że zauważyłeś, mimo że wszyscy byli zmuszeni się go nauczyć, ilość nowo napisanego kodu Prologu jest niewystarczająca dla młodych, mniej „wypróbowanych i prawdziwych” języków? W ciągu ostatnich dwóch lat oceń, ile pojawiło się nowych projektów lub postów na blogu: Clojure, F #, Brain4uck, Go, Cobra, miniKanren i Scala. Niestety, nawet najmniejsza z nich przekroczyła liczbę nowo uruchomionych bibliotek i projektów Prologu połączonych w ciągu ostatnich 10 lat! (Przepraszam, jeśli niektóre z tych języków nie są zbyt młode … ale zastanów się, jaką przyczepność każdy z nich zyskał w tak krótkim czasie)
Myślę, że w ciągu najbliższych dwóch lat Prolog przekroczy co najmniej dwa lub trzy z powyższe języki w postach na blogach i nowych projektach.
Więcej przemyśleń
Piszę wspólny kompilator lisp w Prologu … wygląda na to, że projekt trwa około 2 miesięcy. Działa poprzez przekonwertowanie przez kompilator kodu źródłowego lisp do Prologu, a następnie optymalizację kodu prologu, zamiast pozwolić backendowi skompilować prolog. Ten przepływ danych wydaje się już trudny dla Haskella lub Idrisa. Uważam, że prawdziwym fundamentalnym problemem jest to, że dwa ostatnie języki nie są wystarczająco wyraziste, aby opisać to, co właśnie powiedziałem, w sposób deklaratywny, na poziomie szczegółowości, aby to urzeczywistnić.
Oto przykład „szczegółów opisowych” (np. system pakietów) https://github.com/TeamSPoon/wam\_common\_lisp/blob/master/prolog/wam\_cl/package.pl
Lub optymalizator: https://github.com/TeamSPoon/wam\_common\_lisp/blob/master/prolog/wam\_cl/mizepro.pl
Czy Haskellowi łatwo jest zoptymalizować jego źródło przed uruchomieniem? Spodziewam się również, że w Haskell będzie potrzebował jakiejś pośredniej reprezentacji Haskella, którą może zinterpretować. Prawdopodobnie nie byłoby zbyt trudno napisać interpretera Lispa w Haskell .. kompilator wymaga znacznie więcej pracy?
Poziomy indoktrynacji Haskella są dobrze dostosowane do celów akademickich, w wyniku czego Haskell ma więcej Ph.D. Żony trofeum niż Prolog. Jest o wiele więcej złożoności i instrukcji, jak zadowolić swoich mężów (programista Haskell czyta książkę HoTT po książce HoTT) Ale myślę, że mogą nie zdawać sobie sprawy, że są w związku opartym na nadużyciach. mąż, imieniem Haskell, przyzna im te same przywileje, jakie mają żony z Prologu (zabiorą je na te same wakacje) (nie zdają sobie sprawy z faktycznego istnienia żon z prologu lub podlegają propagandzie mężów (takiej jak w tym wątku) ) …. Otrzymują uprawnienia tylko wtedy, gdy działają bardzo dobrze. Myślę, że takie małżeństwo byłoby odpowiednie tylko dla dojrzałych osób. Oni nie wiedzą, że nigdy nie będą „wystarczająco dobrzy”, aby uzyskać te same wakacje (możliwości programu). Powiedziano im, że takie pragnienia są złe i zmuszone do ochłodzenia się oglądając kolejny film Wadler.
Nie zrozum mnie źle, Prolog ma indoktrynację. . „nie używaj cięć .. nie używaj setarg / lub asserta /” Ale w Haskell, jeśli udoskonalisz swoją metodologię, odkryjesz, że twój zamiar jest zły. W Prologu, jeśli udoskonalisz swoją metodologię, odkryjesz, że twój zamiar nigdy się nie mylił.
Więcej aspektów dysfunkcyjnej relacji:
Zarówno Haskell, jak i Prolog są deklaratywnymi systemami opisującymi łagodzenie stanów. Oba języki, które programista wydaje się być zmuszony do opracowania języka wokół przejść danych. W Prologu jest to wyrażane za pomocą zdań (ale w Haskell te zdania muszą być w typach).
Oba żmudne budowanie toru przeszkód gryzoni przy użyciu papierowych rolek toaletowych … sprawiając, że ten gryzoń porusza się w niezwykle inteligentny sposób. W Prologu budujesz rolki toaletowe, a następnie tworzysz generatory rolek zwane meta-predykatami zamiast rachunku konstruktorów.
Dla mnie Haskell dodatkowe moje logiczne propozycje prologu muszą stać się typami (po jednym na klauzulę posługiwać się). Wydaje się, że może to być dość nudne (rolki papieru toaletowego mają unikalne nazwy) (próba typowania niektórych moich klauzul prologu byłaby trudna) Ponieważ większość moich programów prologowych, które robią niesamowite rzeczy, zawiera tysiące klauzul. Jedynym powodem, dla którego byłoby to dla mnie trudne, byłoby ułatwienie pracy weryfikatorowi typu?Nie jestem pewien, czy te dodatkowe okrążenia w przygnębieniu mi pomogły. Nie muszę też dopasowywać każdej klauzuli (propozycji) do jakiegoś systemu typów (do typu)!
W Prologu, poza mankietem, projektuję dynamicznie mój system typów. warunki. (nieskończone niezwiązane terminy, których używam w implementacji środowiska Lisp) Haskell chciałby, żebym to stracił. Ale co oferuje w zamian? Pewna spójność? Dlaczego programista Prologu miałby rejestrować się w filozoficznym mikrozarządzaniu? p> Haskell chce tylko, bym stracił zdolności? To wydaje się być gorszym małżeństwem, gdybym był dojrzałym programistą, nie wiedziałbym lepiej.
Haskell ma „kult” indoktrynacji. Być może dla większości programistów OO, ponieważ nadal postrzegaliby Haskella jako ruch w górę w kierunku prawdziwych generyków.