Cursos‎ > ‎Cursadas Anteriores‎ > ‎2010‎ > ‎Jueves Mañana‎ > ‎Lógico‎ > ‎Clase 2‎ > ‎

Resumen de la clase

  1. Repaso y ejercicio
    Comenzamos haciendo un breve repaso, contestamos dudas que se plantearon sobre algunos ejercicios de la guía 1. Viendo el ejercicio 4 vimos cómo surge la duda entre modelar algo como 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 vimos que en este ejercicio no se aprovecha esa ventaja, por lo tanto podemos mantener la otra posibilidad.

    Luego resolvimos entre todos el ejercicio 4 de la guía.

  2. Functores
    Hasta acá habíamos trabajado con dos tipos de individuos: átomos y números. Los functores nos permiten tener individuos compuestos, que se describen en función de sus características (parámetros del functor) y un nombre. Utilizamos functores para modelar fechas, por ejemplo fecha(8,4,2010) representaría la fecha de hoy.

    Lamentablemente en prolog los predicados se escriben parecido que los functores... ¡es importante no confundir los dos conceptos! (en realidad eso tiene una motivación, pero es para más adelante, por ahora es sólo una pequeña molestia y no hay que confundirse.

    También vimos que podemos armar functores en cualquier lugar y que no es necesario definirlos de antemano. Por ahora trabajamos con functores que tienen números como parámetros, pero pueden tener cualquier individuo como parámetros, incluyendo por ejemplo a otros functores.

  3. Unificación y pattern matching
    Arrancamos diciendo que el objetivo del prolog ante una consulta con variables va a 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 variables serán únicamente las que usen variables libres, en cambio si uso variables ligadas eso es equivalente a usar los individuos con los que está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 parcialmente definidos) y vimos el mecanismo que utiliza el prolog para llevarlo a cabo.

  4. 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 la presencia de un predicado con limitaciones en cuanto a inversibilidad:
    Cuando un predicado tiene como parámetro a un functor, debemos asegurarnos de ligar todas sus componentes dentro del cuerpo de la regla para que este predicado 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 motor no va a tener forma de ligar las dos primeras componentes de la fecha, correspondientes al día y mes respectivamente. Y por lo tanto las consultas que utilicen una variable como primer parámetro no tendrían sentido.

    Se puede destacar que no se produce un error al usar el predicado de esa manera, simplemente pasa que las consultas podrían no resultar útiles.

  5. 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.
Comments