Saltar al contenido
Portada > Blog Aprender Computación > Programación declarativa con Prolog: más allá de la IA

Programación declarativa con Prolog: más allá de la IA

programación declarativa prolog

Cuando uno empieza a programar suele empezar por la lógica básica de variables, constantes, condicionales y repeticiones. Cuando esto está aprendido, parece que esté todo más que claro, pero con el tiempo te aparecen nuevas formas de programar, los llamados paradigmas de la programación y se te desmonta todo tu pensamiento. En este artículo os voy a hablar de uno de ellos, la programación declarativa, no sin antes hacer mención a los diferentes paradigmas que existen.

Introducción a los Paradigmas de Programación

El mundo de la programación se divide en varios paradigmas que guían la manera en la que se estructuran y piensan los programas. Entre los más conocidos, encontramos la programación imperativa, orientada a objetos, funcional y declarativa. Cada uno de estos paradigmas tiene sus características distintivas y está diseñado para resolver problemas desde diferentes perspectivas.

En la imperativa, le decimos al programa qué tiene que hacer en cada momento. En la orientada a objetos usamos clases y objetos para definir los programas. En la funcional, todo se basa en funciones y, ¿en la declarativa? Esa es la que vamos a ver hoy.

La programación declarativa es un paradigma que destaca por enfocarse en describir «qué» debe hacer el programa en lugar de «cómo» hacerlo. Este enfoque contrasta con la programación imperativa, donde el programador debe especificar paso a paso las instrucciones a seguir. La declarativa es especialmente poderosa en áreas como la Inteligencia Artificial (IA) y los sistemas expertos, donde el conocimiento y las reglas se combinan para obtener conclusiones lógicas de manera eficiente.

¿Qué es la Programación Declarativa y en Qué se Diferencia?

La programación declarativa se distingue de otros paradigmas en que se enfoca en la lógica de los resultados y no en la secuencia de acciones. Uno de los aspectos clave es el uso de una base de conocimientos (knowledge base), que consiste en hechos y reglas predefinidas, y un motor de inferencia (inference engine), encargado de evaluar consultas o queries sobre esa base de conocimientos.

Por lo tanto:

  • Antes de empezar a programar crearemos nuestra base de conocimiento a partir de hechos, relaciones y reglas, como veremos posteriormente.
  • Cuando queramos obtener información escribiremos consultas (queries) sobre lo que queremos buscar.
  • El programa usará el motor de inferencia para buscar el o los resultados a partir de nuestra base de conocimiento.

Así, a diferencia de la programación imperativa, donde el control del flujo del programa es explícito, en la declarativa el control del flujo está implícito en el sistema. El programador simplemente define hechos y relaciones, y el motor de inferencia se encarga de deducir nuevos conocimientos o tomar decisiones en base a las reglas.

Por ejemplo, en un sistema declarativo que gestione información sobre estudiantes y sus habilidades de programación, el conocimiento está estructurado en forma de hechos como estudiante(alina) y conoce_lenguaje(alina, python). A partir de estos hechos, se pueden construir consultas para obtener información más compleja como equipo(A, B) que devuelve todos los pares de estudiantes que conocen Python.

Sintaxis de la Programación Declarativa: Prolog

¿Qué es Prolog?

Uno de los lenguajes más conocidos dentro de la programación declarativa es Prolog. Éste fue creado en 1972 por el profesor Alain Colmerauer y su equipo en la Universidad de Marsella, Francia. El objetivo original era desarrollar un lenguaje que facilitara la creación de sistemas de procesamiento de lenguajes naturales, pero rápidamente se convirtió en una herramienta fundamental en el campo de la inteligencia artificial y la programación lógica, gracias a su capacidad para manejar reglas lógicas y deducir nuevos hechos a partir de una base de conocimientos.

Syntaxis de Prolog

La sintaxis de Prolog indica que:

  • Todos los datos (argumentos) tienen que estar escritos en minúscula. Por ejemplo jorge es un dato o argumento.
  • Las variables tienen que estar escritas con, al menos la primera letra en mayúscula para diferenciarlas de los datos. Por ejemplo, X o Estudiante son variables.
  • Todas las sentencias de código tienen que terminan con punto y final (.).
  • AND se representa mediante una coma (,). OR se representa mediante punto y coma (;), la igualdad se representa mediante el signo igual (=) y NOT se representa mediante la combinación \=.

Hechos, Relaciones y Reglas en Prolog

En Prolog, los programas se construyen a partir de hechos, relaciones, reglas y consultas.

  • Los hechos son indicaciones de verdades en el programa (aunque pueden no serlo en la vida real). Por ejemplo, si queremos indicar la frase Madrid es una ciudad, en Prolog sería: ciudad(madrid). Estos hechos llevan implícito el verbo ser y se denominan de aridad 1 porque sólo tienen un argumento en su interior.

  • Las relaciones son indicaciones de cómo dos argumentos (datos) se relacionan entre sí, por eso se llaman de aridad 2. Por ejemplo, si queremos decir que Madrid es la capital de España, en Prolog sería: capital(madrid, españa).

  • Las reglas son frases condicionales del tipo ESTO SI LO OTRO. Tienen dos partes fundamentales:
    • el Header (o cabeza) que incluye lo que pasará
    • el Body (o cuerpo) que incluye las condiciones que tienen que cumplirse para que el Header sea True.
    • La sintaxis básica de las reglas es Header :- Body. Por ejemplo: abuelo(A,B) :- progenitor(A,Z), progenitor(Z,B)., significa que A es el abuelo de B si A es el progenitor (madre o padre) de Z y a su vez, Z es el progenitor (madre o padre) de B.

A continuación podrás ver un ejemplo simple de cómo funciona la sintaxis básica de este lenguaje. Puedes probar su funcionamiento usando este IDE Online de Prolog.

% Definir hechos sobre estudiantes y lenguajes que conocen
estudiante(alina). % alina es una estudiante
estudiante(diego). % diego es un estudiante
% Definir relaciones entre dos argumentos
conoce_lenguaje(alina, python). % alina conoce el lenguaje Python
conoce_lenguaje(diego, python). % diego conoce el lenguaje Python

% Definir reglas para crear un equipo de estudiantes que conocen Python
equipo_python(A, B) :- conoce_lenguaje(A, python), conoce_lenguaje(B, python), A \\= B.
% A y B son dos variables (por eso se escriben en mayúsculas)
% A y B formarán equipo en Python si A conoce el lenguaje Python y B conoce el lenguaje Python y A y B son personas diferentes (tienen diferentes nombres).

Consultas en Prolog

Sin embargo, ahí no acaban los programas. Eso es sólo la base de conocimiento. A partir de que se haya construido esa base de hechos, relaciones y reglas, se pueden hacer consultas sobre la misma. Las consultas son preguntas que hacemos a la base de conocimiento para obtener resultados que pueden ser:

  • True o False si es una consulta a partir de un hecho, relación o regla sin variables
  • Uno o más valores, si estas consultas incluyen variables.

Por ejemplo:

  • estudiante(alina). devuelve True ya que alina es una estudiante que se encuentra en la base de conocimiento del programa. En este ejemplo, alina no es una variable sino un argumento.
  • estudiante(jose). devuelve False ya que no hay ningun jose estudiante en la base de conocimiento.
  • equipo_python(alina,diego) devuelve True porque los dos estudiantes conocen Python y son distintos entre ellos. En este caso, hay dos argumentos ya que es una regla con dos parámetros A y B.

Usos de la Programación Declarativa: Inteligencia Artificial y Más

La programación declarativa ha encontrado un lugar prominente en el campo de la Inteligencia Artificial. Los sistemas basados en IA, como los sistemas expertos, se benefician de la capacidad de la programación declarativa para manejar bases de conocimiento grandes y complejas, donde las reglas lógicas se aplican para inferir nuevos hechos y resolver problemas.

Un ejemplo típico son los sistemas de planificación automática, donde se define el conocimiento sobre el entorno y se establecen reglas para lograr ciertos objetivos. El motor de inferencia evalúa la información disponible y genera planes para alcanzar las metas.

Además de la IA, este paradigma se aplica en áreas como:

  • Sistemas expertos: En estos sistemas, se usa una base de conocimiento para emular el proceso de toma de decisiones de un humano experto en algún campo (medicina, por ejemplo).
  • Bases de datos: Tener una base de conocimiento es como tener una base de datos de sólo una tabla. El funcionamiento es el mismo: se realiza la consulta (query) y se obtiene uno o más resultados, dependiendo de los datos guardados en la base de datos.
  • Sistemas de razonamiento lógico: Sistemas que permiten realizar deducciones a partir de reglas predefinidas.

Conclusión

La programación declarativa representa un enfoque poderoso y eficiente para resolver problemas complejos mediante la manipulación lógica de datos. Su aplicación en áreas como la Inteligencia Artificial subraya su importancia en el desarrollo de sistemas capaces de razonar de manera similar a los humanos. Al centrarse en el «qué» en lugar del «cómo», este paradigma permite a los desarrolladores concentrarse en la lógica del problema, dejando que el motor de inferencia gestione los detalles operativos. Como hemos explorado en este artículo, lenguajes como Prolog y su uso en sistemas de IA destacan la versatilidad y el impacto de la programación declarativa en el mundo moderno de la computación.


Descubre más desde nauKabits.com

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Etiquetas:

Deja un comentario

Review Your Cart
0
Add Coupon Code
Subtotal
Total Installment Payments
Bundle Discount

 
error: Contenido protegido

Descubre más desde nauKabits.com

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo