¿Prolog es útil profesionalmente?


15

Aprendí Prolog hace muchos años en la universidad. Durante mi vida profesional, nunca he necesitado usar Prolog. ¿Me he perdido algo especial?

Por lo que recuerdo, Prolog requiere una mentalidad completamente diferente en comparación con los lenguajes de programación destacados.

¿Se utiliza realmente Prolog para implementar algo profesionalmente útil?


3
Prolog (y poplog) son muy buenos para la codificación AI. Si no está haciendo cosas relacionadas con la IA de manera profesional / seria, es posible que no lo use en absoluto. Como cómo un no ingeniero nunca puede usar MATLAB en serio.
brillante

1
Buena pregunta. Prolog es el primer lenguaje de programación que se enseña en lingüística computacional en Uni Potsdam, pero después de eso realmente no lo usamos mucho, incluso si somos bastante buenos en eso. Es una lástima. Cada vez que veo una pregunta como "Cómo uso un acumulador" o "Cómo obtengo todas las respuestas posibles" en StackOverflow, me pregunto dónde están los usuarios profesionales reales: la mayoría de las cosas parecen tarea. O tal vez el dominio de Prolog te convierta en un robot que nunca tenga preguntas.
Felix Dombek

Una vez escuché de un sistema de detección de fallas escrito en Prolog e implementado en algún lugar de Austria (¿Klagenfurt?) Según lo que me dijeron, el producto era bastante bueno y se vendía a los clientes. Si considera esto "profesionalmente útil", la respuesta es "sí".
Giorgio

Respuestas:


12

En mi opinión, vale la pena aprender los conceptos básicos de Prolog, independientemente de si alguna vez lo usará en el mundo real. También vale la pena comprender las ideas básicas que subyacen a la unificación y cómo se puede manejar una implementación (trivial e ineficiente).

Si tiene un problema que se resolvería mejor utilizando la lógica declarativa, lo ideal sería reconocerlo y saber (si tiene la opción) utilizar las herramientas adecuadas para ese trabajo.

Sin embargo, estoy de acuerdo en que Prolog necesita una mentalidad muy diferente de los lenguajes imperativos convencionales, y también una mentalidad muy diferente de los lenguajes funcionales. Más allá de cierto punto, parece requerir mucha experiencia (como con cualquier cosa), e incluso hay muchos conocimientos de "libros de texto" que hacen que mi cerebro gotee fuera de mis oídos.

Mi impresión es ... es probable que a ambos nos falte algo especial hasta cierto punto, pero no sería práctico dedicar el tiempo a aprender incluso un conocimiento razonablemente completo a nivel de libro de texto para Prolog, y mucho menos tratar de desarrollar una experiencia del mundo real , a menos que esté considerando una posible carrera de programación lógica.

Recientemente he estado leyendo un libro sobre IA y sistemas expertos publicado en 1989, un hallazgo afortunado en una librería de segunda mano. En gran parte, es un tutorial especializado sobre Lisp y Prolog. Es cierto que la mayor parte de lo que cubre no ha sido tan impresionante durante bastante tiempo (búsqueda, heurística, etc.), pero sigue siendo muy interesante, y la OMI es algo en lo que vale la pena invertir un poco de tiempo.

Los libros más recientes que describen específicamente Prolog serían mejores para aprender el idioma, pero el riesgo es que su cerebro gotee fuera de sus oídos en algún lugar del material intermedio a avanzado.


AI / Prolog novato aquí. ¿Algún recurso en línea que recomendarías?
yati sagade

@yati - Pruebe amzi.com/AdventureInProlog/advtop.php - Una vez corrió a través de un tutorial en el sitio Amsi el cual parecía estar bien por lo que yo recuerdo, pero que era un muy largo tiempo atrás. Todo lo que he visto recientemente (probablemente los últimos 5 años) para Prolog es ese libro de IA que mencioné en esta respuesta. Debe buscar / hacer una pregunta aquí en lugar de publicar comentarios, especialmente los comentarios agregados a las respuestas escritas por alguien que es básicamente un novato a largo plazo de todos modos. Prolog es algo que veo raramente y con muy poca profundidad, o de lo contrario habría dejado de ser un novato hace una década o más.
Steve314

10

Este no era yo, pero suponiendo que la pregunta podría ser "¿alguien implementó algo serio con prolog?" esto podría contar:

http://asmarterplanet.com/blog/2011/02/the-watson-research-team-answers-your-questions.html

Watson funciona con 10 racks de servidores IBM Power 750 que ejecutan Linux, y utiliza 15 terabytes de RAM, 2,880 núcleos de procesador y es capaz de operar a 80 teraflops. Watson se escribió principalmente en Java, pero también se escriben fragmentos importantes de código en C ++ y Prolog, todos los componentes se implementan e integran mediante UIMA.



6

Prolog es ideal para una creación rápida de prototipos. Por ejemplo, en http://www.cri.ensmp.fr/classement/doc/A-381.pdf, una transformación SSA para GCC se implementa primero en Prolog y luego en C.

Estoy usando Prolog dentro de compiladores para una implementación rápida y sucia de sistemas de tipos, ciertas optimizaciones y comprobaciones semánticas, y reescribo ese código de Prolog en algo imperativo solo si su rendimiento no es aceptable.


2

Respondiste bastante rápido, pero utilicé Prolog a mediados de los 90 para diseñar calculadoras de tarifas de seguros que determinarían para nosotros ciertos segmentos de clientes (riesgo de lectura) que encajarían dentro de las tarifas de primas. Es algo que no necesariamente vería día a día, pero seguramente ha afectado sus primas de P&C a lo largo de los años.


2

Según (Este FAQ) 1 Partes de Watson, la máquina de IBM que jugó Jeopardy, fueron escritas en prólogo. (ver pregunta # 6)


1

He usado Prolog profesionalmente en un puñado (significativo) de ocasiones (sistema experto de diagnóstico; transformación HTML; establecer membresía). Tengo un profundo afecto por el lenguaje, así que sí, hay un sesgo aquí, pero es fácil ser objetivo sobre cuándo Prolog es (más / igual) adecuado: realmente necesita procesar estructuras recursivas ; El mejor ejemplo que puedo dar es una tabla de base de datos relacional, pero hay innumerables otros ejemplos (probablemente sea más fácil enumerar contraejemplos como la entrada aleatoria del usuario o (la mayoría) de las funciones matemáticas (sin embargo, muchas funciones matemáticas tienen una estructura recursiva y, por lo tanto, son perfectamente apropiados (transformación de Fourier rápida discreta, por ejemplo)).

Pero, por supuesto, muy pocos 'sistemas de extremo a extremo' pueden definirse únicamente en términos del procesamiento de estructuras recursivas (excepción: prueba de teorema, pero este es un ejercicio bastante académico *), por lo que es una suerte que un proceso de prólogo puede injertarse en un "proceso imperativo más estándar" utilizando todo tipo de técnicas diferentes (no importa qué, pero una interfaz de servicio web probablemente sea generalmente adecuada); para que pueda lidiar con la interfaz de usuario y el procesamiento de eventos aleatorios, etc. y luego entregarlos cuando sea necesario (para realizar consultas complejas de bases de datos o cualquier cantidad de cosas que desee hacer con sus estructuras recursivas). Me parece que funciona muy bien, mejor que, por ejemplo, LINQ.

¡Así que toma tus estructuras recursivas por partes sensibles y escribe un Prolog encantador, limpio, elegante y fácil de mantener! :)

PD: cuando no estoy usando Prolog, vuelvo a C #

  • Aunque anhelo el día en que, al menos algunos aspectos de, los programas comerciales se demuestren correctos como una práctica estándar.

1

Intente escribir un solucionador de sudoku en su idioma favorito, luego verifique cómo se hace en Prolog. En general, cualquier problema de CLP se adapta bien con un lenguaje declarativo como Prolog.

También se usa ampliamente en la verificación formal de hardware y software (académica y probablemente profesionalmente, pero no tengo ninguna referencia a las empresas).

Finalmente, Erlang está profundamente influenciado por Prolog, con tolerancia a fallas y concurrencia en mente.


0

El software que lee y clasifica gran parte del correo en los EE. UU. Y en otros países está escrito en Prolog, utilizando un compilador altamente optimizado. La sintaxis de las direcciones de correo está escrita en gramáticas de cláusulas definidas, lo que facilita el mantenimiento y simplifica la adaptación del lector a las convenciones de varios países y usuarios industriales. Los servicios postales a menudo tienen conjuntos complicados de reglas sobre cosas como reenviar direcciones, apartados postales frente a la dirección de la calle, etc., y estas reglas también están formuladas en Prolog para facilitar el mantenimiento.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.