El famoso problema del 15-puzzle en Prolog
Uno de los problemas clásicos dentro del campo de la Inteligencia Artificial simbólica es el 15-puzzle. Es exactamente igual que el 8-puzzle, pero con un tablero más grande. La idea es que tenemos un tablero cuadrado NxN (en el caso del 15-puzzle, N=4; en el 8-puzzle, N=3) donde hay piezas desordenadas y tenemos que ordenarlas para que se siga la secuencia numérica en orden. Realmente hay una pieza que falta y que usamos de hueco para intercambiar posiciones. Las piezas se pueden mover arriba, abajo, a la izquierda o a la derecha pero solo si la casilla a donde vamos es donde está el hueco (y el hueco pasa a donde estaba la pieza antes).
Mercury: cuando Prolog y Haskell tuvieron un bebé
Mercury es un lenguaje de programación muy poco conocido pero muy interesante. De forma corta podríamos describirlo como el hijo que tendrían Prolog y Haskell. Se trata de un lenguaje que combina los paradigmas lógico y funcional en uno solo. Fue desarrollado por la Universidad de Melbourne en Australia aunque ahora sobrevive como proyecto opensource. Su objetivo era la creación de software grande, robusto y eficiente. La sintaxis es tremendamente parecida a Prolog, por lo que aunque haya algunas modificaciones, es relativamente fácil escribir en él si ya conocemos Prolog. Mercury tiene tipado fuerte y estático y genera ejecutables nativos. Es algo más puro que Prolog ya que gestiona mejor los side effects y es probablemente el lenguaje lógico más rápido que existe a día de hoy.
Teletexto #012
Ya iba siendo hora de otro teletexto, ¿no creéis? Pues sí, ha pasado ya un tiempo y mi lista de enlace ha crecido enormemente. Vamos con algunos de ellos.
Código Morse en Prolog
El otro día me encontré por Twitter con el reto semanal de Brais Moure (@MoureDev). Se trataba de un programa que permitiese pasar texto a código morse y viceversa. Decidí resolver el problema en Prolog, mi lenguaje lógico favorito, y he aquí una explicación para entender la solución. Usaré Scryer Prolog ya que es el más cómodo para trabajar con strings.
Logtalk, Prolog orientado a objetos
Que en este blog se habla de Prolog es algo que se da por hecho. Hoy sin embargo, vamos a hablar de un lenguaje quizá más desconocido que extiende Prolog. Se trata de Logtalk y de forma resumida podríamos decir que es Prolog + Orientación a Objetos. Pero no cualquier tipo de orientación a objetos. Orientación a objetos declarativa. Logtalk nos permite encapsular y reutilizar código de forma mucho más efectiva que en Prolog, no perdiendo nada de lo que ya podemos hacer en Prolog.
Alien fingers en Prolog
Hace pocos días me encontré con el problema de "Alien fingers" en mi TL de Twitter. Se trata de un sencillo problema, que podemos resolver en Prolog de forma 100% declarativa.
Sorteo 2022: ¿Qué has aprendido en el blog?
¡Saludos, lectores! Dentro de nada entraremos en el 2022 y para celebrarlo, qué mejor que unos pequeños regalos.
Introducción a Z3, el demostrador de teoremas de Microsoft
Z3 es un demostrador de teoremas open source creado por Microsoft. Una herramienta muy útil para resolver ciertos problemas de alta complejidad algortítmica. Z3 en particular se enfoca en la resolución SMT. En este artículo veremos como podemos usarlo para resolver problemas sencillos y no tan sencillos. Se trata de otro lenguaje dentro del mundo de la programación lógica, como Prolog, pero bastante más específico.
htmx, o como sería HTML si se tomase el hipertexto en serio
Hoy os traigo un framework web con el que últimamente estoy jugando bastante. Se llama htmx y a diferencia de otros frameworks como React o Vue, aquí no escribiremos JavaScript. Escribiremos más HTML siguiendo la filosofía original del hipertexto. ¿Intrigado? Sigue leyendo.
El problema del Hello World
Cuando empezamos en un lenguaje de programación lo más habitual suele ser empezar con la mítica frase de Hello World (Hola Mundo). Sin embargo, hay que tener en cuenta que este pequeño programa tiene algunos inconvenientes si lo queremos usar para comparar entre lenguajes y sus funcionalidades.