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?
programming-languages
prolog
Gursel Koca
fuente
fuente
Respuestas:
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.
fuente
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
fuente
Sé que los programadores de IA lo usan ... porque hice un curso de Prolog en mi clase de IA, pero además no he visto mucho más al respecto. ¡Aquí hay una pregunta similar con muchas respuestas! /programming/130097/real-world-prolog-usage
fuente
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.
fuente
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.
fuente
Según (Este FAQ) 1 Partes de Watson, la máquina de IBM que jugó Jeopardy, fueron escritas en prólogo. (ver pregunta # 6)
fuente
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 #
fuente
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.
fuente
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.
fuente