- Repaso y ejercicio
Comenzamos haciendo un breve repaso,contestamos dudas que se plantearon sobre algunos ejercicios de la guĆa1. Viendo el ejercicio 4 vimos cómo surge la duda entre modelar algocomo un predicado o como un individuo, es decir entre sereno(nico) y es(nico,sereno).
Mencionamos que la ventaja de la segunda es que me permite hacer la consulta es(nico, X)y obtener todas las caracterĆsticas de una persona. Igualmente vimosque en este ejercicio no se aprovecha esa ventaja, por lo tanto podemosmantener la otra posibilidad.
Luego resolvimos entre todos el ejercicio 4 de la guĆa.
- Functores
HastaacĆ” habĆamos trabajado con dos tipos de individuos: Ć”tomos y nĆŗmeros.Los functores nos permiten tener individuos compuestos, que sedescriben en función de sus caracterĆsticas (parĆ”metros del functor) yun nombre. Utilizamos functores para modelar fechas, por ejemplo fecha(8,4,2010) representarĆa la fecha de hoy.
Lamentablementeen prolog los predicados se escriben parecido que los functores... ”esimportante no confundir los dos conceptos! (en realidad eso tiene unamotivación, pero es para mÔs adelante, por ahora es sólo una pequeñamolestia y no hay que confundirse.
También vimos que podemosarmar functores en cualquier lugar y que no es necesario definirlos deantemano. Por ahora trabajamos con functores que tienen números comoparÔmetros, pero pueden tener cualquier individuo como parÔmetros,incluyendo por ejemplo a otros functores.
- Unificación y pattern matching
Arrancamosdiciendo que el objetivo del prolog ante una consulta con variables vaa ser encontrar valores para esas variables que satisfagan la consulta.
Hablamos de que las variables tienen dos estados: libre y ligada. ¿Cómo saber dentro de un predicado si una variable estÔ libre o ligada?
- Los parƔmetros estarƔn libres o ligados dependiendo de la consulta que nos han hecho (si es individual, existencial o variable).
- Las variables que sólo se usan localmente arrancarÔn siempre estando libres.
- Si una variable aparece mÔs de una vez en el cuerpo de un predicado (que es lo mÔs probable), sólo la primera de ellas puede estar libre, luego estarÔ ligada por ese primer uso.
Podemos entonces extender nuestro conocimiento sobre los tipos de consulta, entonces consultas variablesserĆ”n Ćŗnicamente las que usen variables libres, en cambio si usovariables ligadas eso es equivalente a usar los individuos con los queestĆ”n ligadas y por lo tanto no serĆan consultas variables.
También vimos muchos ejemplos de cómo se pueden unificar (o matchear)dos expresiones (individuos, variables, individuos parcialmentedefinidos) y vimos el mecanismo que utiliza el prolog para llevarlo acabo.
- Inversibilidad
Hasta acĆ” todos los predicados que habĆamos hecho eran totalmente inversibles.Ahora el hecho de utilizar functores nos pone por primera vez ante lapresencia de un predicado con limitaciones en cuanto a inversibilidad: Cuandoun predicado tiene como parĆ”metro a un functor, debemos asegurarnos deligar todas sus componentes dentro del cuerpo de la regla para que estepredicado pueda considerarse totalmente inversible sin salvedades.
El ejemplo que utilizamos fue:
aƱo(fecha(_,_,A), A).
AhĆse puede ver que si no le proporcionamos el primer parĆ”metro, el motorno va a tener forma de ligar las dos primeras componentes de la fecha,correspondientes al dĆa y mes respectivamente. Y por lo tanto lasconsultas que utilicen una variable como primer parĆ”metro no tendrĆansentido.
Se puede destacar que no se produce un error al usar elpredicado de esa manera, simplemente pasa que las consultas podrĆan noresultar Ćŗtiles.
- Aritmética en un lenguaje lógico
Aprendimos los rudimentos necesarios para utilizar operaciones aritmƩticas en el lenguaje Prolog.
Aquà se agrega otro problema de inversibilidad: todo lo que esté a la derecha del is tiene que estar totalmente ligado.
|
|