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í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.

  2. 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.

  3. 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.

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

  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.