La mejor respuesta
Emacs hasta el final.
Para un desarrollo serio de Prolog, recomiendo GNU Emacs con el modo Prolog que mantiene Stefan Bruda. La página de inicio de SWI-Prolog explica cómo configurarlo y también incluye sugerencias para material adicional:
Uso de SWI-Prolog con GNU Emacs
De hecho, SWI-Prolog incluso viene con su propio clon de Emacs, que es útil para tareas de edición más pequeñas. Puede invocarlo con? – emacs.
Para algunas sugerencias alternativas, consulte esta discusión:
What «sa good ¿Prolog IDE para Linux?
Respuesta
Prolog no se está muriendo. Por lo general, se le enseña a todos los estudiantes de Comp Sci que están trabajando para obtener un doctorado. Sin embargo, su pregunta puede estar en en parte debido al hecho de que te has dado cuenta de que, a pesar de que todos se han visto obligados a aprenderlo, la cantidad de código Prolog recién escrito no llega a los lenguajes jóvenes menos «probados y verdaderos». En los últimos dos años, evalúe cuántos proyectos nuevos o publicaciones de blog hay: Clojure, F #, Brain4uck, Go, Cobra, miniKanren y Scala. Lamentablemente, incluso el menor de estos ha superado el número de bibliotecas y proyectos Prolog recién iniciados combinados en los últimos 10 años. (Lo siento si algunos de estos idiomas no son muy jóvenes … pero piense en cuánta tracción ha ganado cada uno en períodos de tiempo tan cortos)
Creo que los próximos dos años Prolog superará al menos dos o tres de los lenguajes anteriores en publicaciones de blog y nuevos proyectos.
Más pensamientos
Estoy escribiendo un compilador lisp común en Prolog … parece un proyecto de 2 meses. Funciona haciendo que el compilador convierta el código fuente lisp en Prolog y luego optimizando el código del prólogo en lugar de permitir que el backend compile el prólogo. Este flujo de datos ya parece difícil para Haskell o Idris. Creo que el problema fundamental real es que los dos últimos lenguajes no son lo suficientemente expresivos para describir lo que acabo de decir declarativamente en el nivel de detalle para que suceda.
Aquí hay un ejemplo de «detalles descriptivos» (por el sistema de paquetes) https://github.com/TeamSPoon/wam\_common\_lisp/blob/master/prolog/wam\_cl/package.pl
O el optimizador: https://github.com/TeamSPoon/wam\_common\_lisp/blob/master/prolog/wam\_cl/mizepro.pl
¿Es fácil hacer que Haskell optimice su fuente antes de ejecutarlo? También espero que en Haskell necesite algún tipo de representación intermedia de Haskell que pueda interpretar. Probablemente, no sería demasiado difícil escribir un intérprete Lisp en Haskell … ¿el compilador es mucho más complicado?
Los niveles de adoctrinamiento de Haskell son adecuados para propósitos académicos y, como resultado, Haskell tiene más Ph.D. Trofeo esposas que Prolog. Hay mucha más complejidad y manuales sobre cómo complacer a sus maridos (el programador de Haskell lee el libro de HoTT tras el libro de HoTT) Pero creo que tal vez no se den cuenta de que están en una relación abusiva: lo perverso es que piensan (esperan) su El esposo, llamado Haskell, les otorgará los mismos privilegios que tienen las esposas Prolog (tomarlas en las mismas vacaciones) (Sin embargo, desconocen la existencia real de las esposas Prolog o están sujetas a la propaganda de sus maridos (como se ve en este hilo) ) …. Obtienen privilegios solo si funcionan muy bien. Creo que un matrimonio así solo sería adecuado para el núbil … lo que no saben es que nunca serán «lo suficientemente buenos» para tener las mismas vacaciones (capacidades del programa). Se les dice que esos deseos son incorrectos y se les hace enfriar viendo otro video de Wadler.
No me malinterpretes, Prolog to tiene adoctrinamiento. . «no uses cortes … no uses setarg / o asserta /» Pero en Haskell, si refinas tu metodología, descubrirás que tu intención es incorrecta. en Prolog, si refinas tu metodología, descubrirás que tu intención nunca estuvo mal.
Más aspectos de la relación disfuncional:
Tanto Haskell como Prolog son sistemas declarativos para describir la mitigación de estados. Ambos lenguajes, el programador parece tener para desarrollar un lenguaje en torno a las transiciones de datos. En Prolog, se expresa a través de proposiciones. (Pero en Haskell estas proposiciones tienen que estar en tipos)
Ambos construyen tediosamente una carrera de obstáculos para roedores usando rollos de papel higiénico … La batalla intelectualmente es hacer que ese roedor se mueva de formas ultrainteligentes. En Prolog, construyes los rollos de papel higiénico, luego haces generadores de rollos de papel higiénicos llamados meta-predicados en lugar del cálculo de los constructores.
Para mí, veo a Haskell un extra de mis proposiciones lógicas de prólogo tiene que convertirse en tipos (uno por cla utilizar). Parece que puede ser bastante tedioso (los rollos de papel higiénico tienen nombres únicos) (tratar de tipificar algunas de mis cláusulas de prólogo sería difícil) ya que la mayoría de mis programas de prólogo que hacen cosas increíbles contienen miles de cláusulas. ¿La única razón para hacer esto difícil para mí sería facilitar las cosas para el verificador de tipos?No estoy seguro de que estas vueltas extra en medio del abatimiento me ayuden. Además, ¡no tengo que hacer que cada cláusula (proposición) encaje en algún sistema de tipos (en un tipo)!
En Prolog, de improviso, diseño mi sistema de tipos de forma dinámica … no terminable términos (infinitos términos libres como yo uso en la implementación del entorno Lisp) Haskell querría que perdiera eso. Sin embargo, ¿qué ofrece a cambio? ¿Un poco de coherencia? ¿Por qué un programador de Prolog se registraría para una microgestión filosófica? p> ¿Todo lo que Haskell quiere es que pierda capacidades? Ese parece ser un matrimonio en el peor de los casos, si yo fuera un programador núbil, no lo habría sabido mejor.
Haskell tiene un «culto» al adoctrinamiento. Quizás para la mayoría de los programadores de OO, ya que todavía verían a Haskell como un movimiento ascendente hacia genéricos reales.