domingo, 24 de noviembre de 2019

Más de Prolog

Seguimos con Prolog

Veamos los operadores que nos trae prolog :


El operador "is" permite evaluar expresiones: X is Y

Veamos un ejemplo:

longitud([],0).
longitud([_|Resto],N):-
   longitud(Resto,N1), N is N1+1.

Luego tenemos los operadores lógicos


Con estos operadores podemos hacer lo siguiente: 










Predicado de control. Corte (!) : El corte es un predicado predefinido que se denota mediante un punto de exclamación (!), no tiene argumentos, y cuya evaluación es siempre cierta. 

Los cortes permiten al programador intervenir en el control del programa, puesto que su presencia hace que el sistema ignore ciertas ramas del árbol.

Su utilidad básica, dado que reduce el espacio de búsqueda de soluciones, es mejorar la eficiencia de los programas, evitando la exploración de partes del árbol de resolución de las que se sabe de antemano que no conducirán a ninguna nueva solución.

Veamos un ejemplo :

La representación anterior calcula correctamente los valores de la función, pero tiene el siguiente inconveniente.
Supóngase que se realiza la consulta:
?- f(0,Z), Z>1.

La respuesta de Prolog será “falso”, pero para llegar a dicha conclusión el sistema tiene que recorrer las 3 posibles ramas del árbol

Lo anterior es poco eficiente, puesto que, al ser las tres reglas que describen el predicado f mutuamente excluyentes, una vez que se ha encontrado una solución con una de ellas no tiene sentido probar con el resto. En efecto, la función que se esta calculando tiene la siguiente estructura condicional:

si X ≤ 10 entonces Y = 0; 
si no: si X ≤ 20, entonces Y = 1; 
si no: Y = 2

Esto se puede espresar de la siguiente manera con el operador ! : 


Con esta nueva versión, la respuesta de Prolog a la consulta 

?- f(0,Z), Z>1.

será también “falso”, pero ahora, gracias a la introducción del corte en la primera regla, el sistema solo tendrá que explorar la primera rama del árbol.


No hay comentarios.:

Publicar un comentario