Aprendí programación lógica con Prolog gracias a las batallas de Pokémon

Fuentes: Unplanned Obsolescence
Aprendí programación lógica con Prolog gracias a las batallas de Pokémon
Imagen generada con IA

Este artículo narra cómo el autor finalmente comprendió la programación lógica utilizando Prolog, después de años de intentarlo, gracias a un proyecto aparentemente sencillo: modelar las mecánicas de combate de los videojuegos Pokémon. La razón por la que este enfoque funciona tan bien es porque las batallas de Pokémon son, en esencia, un sistema de reglas extremadamente complejo: tipos de movimiento, tipos de Pokémon, efectividad múltiple (desde 0x hasta 4x), habilidades, estadísticas y combinaciones posibles que hacen casi imposible manejar todo manualmente. La programación lógica resulta perfecta para esto porque permite declarar 'hechos' y 'reglas' que el sistema puede combinar automáticamente para responder preguntas. En Prolog, por ejemplo, se expresa pokemon(bulbasaur) como un hecho, y type(bulbasaur, grass) como la relación entre un Pokémon y su tipo. Lo revolucionario es que estas consultas pueden trabajar en cualquier dirección: puedes preguntar qué tipo es Squirtle, qué Pokémon son de tipo Agua, o incluso cuáles son de tipo agua-hielo simultáneamente. El sistema de unificación encuentra automáticamente todas las combinaciones posibles. Este enfoque tiene aplicaciones prácticas en dominios donde hay muchas reglas complejas interrelacionadas: sistemas de recomendación, validación de datos, análisis de ontologías, chatbots con conocimiento estructurado, y en general cualquier problema donde la lógica de negocio es más importante que los algoritmos paso a paso. Como consideración importante, la programación lógica no es adecuada para todos los problemas; brilla cuando hay muchas reglas que consultar, pero puede ser menos intuitiva para desarrolladores acostumbrados a pensar imperativamente. Además, requiere un cambio de mentalidad: en lugar de decir 'cómo hacer algo', se declara 'qué es verdadero'.