Sintaxis del lenguaje de programación PROLOG
Antes de iniciar con la explicación de los conceptos básicos de PROLOG, es necesario entender algunos de los elementos sintácticos más importantes de dicho lenguaje:
- Variables. Las variables en PROLOG deben de iniciar con letra mayúscula para poder identificarla, es decir es correcto usar la variable “Variable”, pero incorrecto definirla como “variable”.
- Constantes. Los datos constantes deben de iniciar su definición con minúscula, para que pueda ser identificada como tal. Es correcto definir una constante como “constante”, pero incorrecto definirla como “Constante”.
- Afirmación. Cada afirmación debe ser terminada por medio de un punto, esto indicará al lenguaje la finalización de cada sentencia, y obviamente, la posibilidad de comenzar una nueva sentencia.
- NO usar nombres compuestos separados por espacio para nombrar constantes, variables, predicados, reglas, etc. , es incorrecto definir un nombre llamado “somos ingenieros”, pero es correcto definirlo como “somos_ingenieros”.
- Comentarios. Podemos comentar el software por medio del símbolo reservado “%”, cada que se coloque dicho símbolo, PROLOG entenderá que los enunciados posteriores a él, serán solo comentarios y no los tomará en cuenta para la lectura y ejecución del programa realizado.
El lenguaje de programación PROLOG, está basado principalmente en la definición de hechos, relaciones y reglas. Esto realizado por medio de lógica de predicados.
- Hechos monoádicos. Es la representación más simple dentro del lenguaje de programación. Por medio de estos, se busca darle una característica a un objeto (sujeto). Son representados en la forma: felino(gato). En este caso, podemos ver que “felino” es el predicado del sujeto “gato”, el predicado definido se puede leer como “gato es un felino”.
- Hecho poliádico. En este tipo de predicados, se busca enmarcar las relaciones que existen entre los distintos objetos, por ejemplo: es_un_animal(tiburón, acuático). En este caso, el predicado se puede leer como “tiburón es un animal acuático”, y de esa manera se genera la relación que existe entre los objetos definidos.
- Reglas. Están definidas como la interconexión de predicados verdaderos, para confirmar un hecho que debe ser también verdadero. La definición de reglas se da por medio de la estructura:
1 |
regla(objeto1, objeto2):- hecho1(objeto1, objeto_n), hecho2(objeto_n, objeto2). |
Esta sentencia puede leerse en la forma la “regla” es verdadera si y sólo si el “hecho1” y el “hecho2” son verdaderos. En esta sentencia es importante hacer mención a la situación e la cual el “hecho1” y el “hecho2” están relacionadas entre sí por medio de “objeto_n”.
Los predicados, o hechos, pueden tener una cantidad $n$ de objetos o argumentos, con lo cual podemos tener una representación general en la forma:
1 |
hecho(objeto_1, objeto_2, ….., objeto_n). |
Definiendo cada predicado, con objetos relacionados lógicamente entre sí.
Las reglas también pueden tener una cantidad $m$ de hechos, y una cantidad $i$ de objetos, la forma general de las reglas puede ser mostrada en la siguiente forma:
1 2 3 4 |
Regla(objeto_1, objeto_2, …, objeto_i):- hecho_1(objeto_1, objeto_2, …, objeto_n), hecho_2(objeto_1, objeto_2, …, objeto_n), ….., hecho_m(objeto_1, objeto_2, …, objeto_n). |
Algunas características importantes de mencionar al momento de generar las reglas y los hechos son:
- Ambos pueden ser declarados con una cantidad nula de objetos.
- Si existen relaciones entre los hechos, estas deben de ser cumplidas exitosamente. No pude haber una relación entre hechos u objetos que no sean cumplidas.
- Para que la regla sea verdadera, todos los hechos deben ser verdaderos.
Cuando se tienen predicados simples, se considera que solamente estamos llenando una base de conocimientos, base que puede ser utilizada posteriormente por programas más complejos.
Ejemplo 1:- Generar una base de conocimientos dónde se defina la característica “ave” de diferentes objetos.
1 2 3 4 5 6 |
ave(loro). ave(pato). ave(ganso). ave(pingüino). ave(gallo). ave(perico). |
Ejemplo 2:- Generar una base de conocimiento donde se defina la relación “que tipo de animal es” de dos objetos.
1 2 3 4 5 6 |
es_tipo(perro, terrestre). es_tipo(ganso, aéreo). es_tipo(tiburón, acuático). es_tipo(tigre, terrestre). es_tipo(murciélago, aéreo). es_tipo(delfín, acuático). |
Cuando se realiza un programa de este tipo en PROLOG, este se ejecuta por medio de consultas, es decir, asumiendo que estamos ejecutando la base de conocimientos del ejemplo 2, en el intérprete consultamos “? es_tipo(X,Z).”
Bajo esta consulta, PROLOG intentará instanciar las variables X y Z, asignándoles valores para los cuales el predicado se convierte en verdadero. PROLOG, no genera una única respuesta, generara tantas respuestas como existan condiciones que vuelvan verdadero al predicado, por ejemplo, para este caso PROLOG instanciara X = perro y Z = terrestre, así como también X = ganso y Z = aéreo, así hasta completar todos los posibles valores que sean verdaderos.
Si PROLOG no puede instanciar una de las variables de la consulta, el intérprete regresará una respuesta falsa, es decir que la búsqueda ha fracasado.