El primer problema que tuve con Prolog es que no es un lenguaje de programación lógico. Carece de la lógica estándar de tres valores de "verdadero", "falso" y "no sé", combinando los dos últimos. En otras palabras, los dos valores de verdad son en realidad "se pueden mostrar" y "no se pueden mostrar". Esto le da a Prolog problemas reales con la idea de "no", que es bastante básico para el razonamiento lógico.
En lógica normal, es perfectamente razonable probar una proposición refutando su negación, esto se llama "reductio ad absurdam" (a menos que lo haya escrito mal). (Sí, hay personas que han tratado de reconstruir las matemáticas sin usarlo, pero eso se está volviendo un tanto esotérico). Esto simplemente no funciona en Prolog, ya que no hay distinción entre que se probó ser falso y no se probó nada.
Por lo tanto, cuando hice un proyecto de clase en Prolog, me metí en problemas cada vez que pensaba en ello como lógica de programación. Siempre terminaba haciendo algo que requería una negación real. Tal vez otras personas no hacen eso, pero terminé pensando en él como un lenguaje de coincidencia de patrones, y luego tuve poca dificultad para terminar el proyecto.
No es posible tener un verdadero lenguaje basado en lógica donde el programador puede escribir cosas y realmente confiar en los resultados. El cálculo de predicados de primer orden (es decir, la lógica con variables, funciones de verdadero o falso, "y", "o", "no", "para todos" y "existe") es positivamente indecidible. (Hay razones por las que seguimos vertiendo café en matemáticos en lugar de generar todos los teoremas posibles mecánicamente, después de todo.) No hay forma de que un programador sepa a priori si una proposición determinada será probada o no, incluso si el programador ya sabe es verdadero o falso
Editar: También olvidé la necesidad crítica de ordenar correctamente las cláusulas. En lógica, no importa en qué orden anotes las cosas. En Prolog, seguí entrando en ciclos infinitos, hasta que dejé de tratarlo como un lenguaje basado en lógica. De nuevo, tiene algunas características agradables como un lenguaje de coincidencia de patrones, pero no es lógica, y me pareció como un pony de un solo idioma. YMMV, pero algunas otras personas parecen estar de acuerdo conmigo.
Si no estás hablando de Prolog, ¿de qué estás hablando? – user51568
... Tal vez deberías leer el resto de las frases después de "No estoy preguntando sobre Prolog". –
¿Qué lenguajes de programación lógica, ya que no estamos hablando de Prolog? Si son tan oscuros, esa puede ser la respuesta. Las personas han estado expuestas a la programación funcional durante décadas, con Lisp y Scheme. –