prolog - inaoeemorales/cursos/prolog/acetatos/acetatos.pdf · 2 matematicas simb´ olicas...
Post on 16-May-2020
9 Views
Preview:
TRANSCRIPT
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Prolog
Eduardo Morales
INAOE
2012
(INAOE) 2012 1 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Contenido1 Introduccon2 Antecedentes3 Nociones de Logica4 Relacion con Logica5 Sintaxis6 Listas7 Aritmetica8 Algunos Ejemplos9 Control
10 Selectores y Acceso a Predicados y Programas11 Todas las soluciones12 Operadores13 Estructuras Parciales14 Definite Clause Grammar (DCG)
(INAOE) 2012 2 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Objetivo General
Introducir los conceptos fundamentales de laprogramacion logica y aprender a programar enProlog.
(INAOE) 2012 3 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Temario
1 Introduccion a la programacion logica• Historia• Predicados, hechos, queries, variables, reglas• Unificacion y resolucion, relacion con logica• Estrategia seguida por Prolog
(INAOE) 2012 4 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Temario (cont.)
2 Sintaxis, listas, estructuras, aritmetica3 “Backtracking”, ! (cut), not4 =.. (univ), arg, functor5 bagof, setof, findall6 I/O
(INAOE) 2012 5 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Temario (cont.)
7 Diferencias de listas, estructuras incompletas8 Meta–predicados: numbervars, ground, verify9 Definite Clause Grammmar (DCG)
(INAOE) 2012 6 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Temario (cont.)
10 Aplicaciones:1 Busqueda (8–puzzle)2 Matematicas simbolicas (derivacion, cripto–aritmetica)3 Propagacion con de restricciones4 Aprendizaje5 Lenguaje natural6 Programacion Logica Inductiva7 Aprendizaje por refuerzo
(INAOE) 2012 7 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Bibliografıa
• Bratko, I. “Prolog Programming for ArtificialIntelligence”, 4a edicion. Addison–Wesley.
• Clocksin, W.F. y Mellish, C.S. “Programming in Prolog”,2a edicion. Springer–Verlag.
• Sterling, L. y Shapiro, E. “The Art of Prolog: AdvancedProgramming Techniques”. The MIT Press, Cambridge,MA 1986.
• O ’Keefe, R. “The Craft of Prolog”. The MIT Press,Cambridge, MA.
(INAOE) 2012 8 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
• Idea de programacion simbolica:Manejar sımbolos, asignar sımbolos a objetosy manipularlos
• Contraste con otros lenguajes de programacion que seconcentran en el calculo numerico (no implica que nopuedan hacerse cosas numericas / simbolicas conlenguajes simbolicos / numericos, solo que es masdifıcil)
(INAOE) 2012 9 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
• E.g., las reglas usadas en SE se pueden ver comomanipulaciones simbolicas
• Lenguajes mas usados en IA: Lisp y Prolog
(INAOE) 2012 10 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
• El concepto de logica esta ligado al del pensamientocientıfico
• Logica provee de un lenguaje preciso para expresar enforma explıcita las metas, conocimiento, suposiciones
(INAOE) 2012 11 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
Logica provee los fundamentos para:
1 Deducir consecuencias a partir de premisas2 Estudiar la verdad/falsedad de proposiciones a partir de
la verdad/falsedad de otras proposiciones3 Establecer consistencias de nuestras suposiciones4 Verificar la validez de nuestros argumentos
(INAOE) 2012 12 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
• Las computadoras tambien son objeto de estudiocientıfico.
• Al igual que la logica requieren de una forma precisa yde proposiciones explıcitas para expresar nuestrasmetas y suposiciones.
• Sin embargo, mientras la logica se ha desarrollado conel pensamiento humano como unica consideracionexterna, el desarrollo de la maquina ha estadogobernado desde el principio por restricciones detecnologıa e ingenierıa.
(INAOE) 2012 13 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
• Aunque las computadoreas fueron disenadas para serusadas por el hombre, sus dificultades en suconstruccion ha sido tan dominante, que el lenguajepara expresar problemas y decirles como hacer lascosas fue disenado desde la perspectiva de laingenierıa de la computadora.
• Esto empezo a solucionarse con lenguajes de mas altonivel, y las dificultades empezaron a ser en lainhabilidad del humano para programar.
(INAOE) 2012 14 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
• Idealmente deberıamos de poder expresarnos en formamas natural...
• ... la logica (que ha estado en el proceso delpensamiento humano desde hace mucho tiempo) hasido un buen candidato para esto.
“En lugar de hacer que el hombre seadapte/dependa de las maquinas, la maquinadeberıa de hacer las instrucciones que sonfaciles de dar por el hombre”
(INAOE) 2012 15 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Introduccon
Introduccion
• En su forma mas pura sugiere que solo se le deconocimiento y suposiciones del problema en forma deaxiomas logicos y se ejecuta tratando de probar metas.
Programa = conjunto de axiomasComputacion = prueba de metas
(INAOE) 2012 16 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Antecedentes
Antecedentes
• El 1er uso de la logica como lenguaje de programaciones una secuela del algoritmo de unificacion deRobinson y su principio de resolucion (’65)
• Kowalski: formula la interpretacion procedural de logicaen clasulas de Horn (’72).
• Colmerauer y su grupo en Marseille–Aix desarrollan unprobador de teoremas experimental escrito en Fortranpara procesamiento de lenguaje natural: Prolog(“programmation en logique”) (’73).
(INAOE) 2012 17 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Antecedentes
Antecedentes
• van Edman y Kowalski desarrollan la parte semanticaformal.
• Poca aceptacion en EUA despues de intentosparecidos y fracasos con Micro–Planeer y Conniver(ineficientes, difıciles de controlar).
• Mediados de los 70’s: D. Warren hace un compilador(Prolog-10) eficiente (con la mayor parte escrito enProlog!).
(INAOE) 2012 18 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Antecedentes
Antecedentes
• Alrededor de 1980 todavıa pocos (≈ 100) programabanen Prolog.
• Japon anuncia su Proyecto de la Quinta Generacioncon la programacion logica como parte medular (’81).
• Notacion “estandar”: la de Edimburgo.• Idea general (idealizada): en lugar de programar,
describir lo que es verdadero.
(INAOE) 2012 19 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Nociones de Logica
• Un programa logico es un conjunto de axiomas o reglasque definen relaciones entre objetos y definen unconjunto de consecuencias (su sentido).
• El arte de programar en logica consiste en construirprogramas concisos y elegantes que tengan el sentidodeseado.
• En programacion logica existen tres elementos:1 Hechos2 Reglas3 Queries
(INAOE) 2012 20 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Nociones de Logica
• Finalmente todo se puede ver como clausulas:disjuncion de un conjunto finito de literales (¬ = no).
{A1,A2, . . . ,An,¬B1, . . . ,¬Bm}.
Notacion equivalente:A1,A2, . . . ,An ← B1,B2, . . . ,Bm.
De: A← B ≡ A ∨ ¬B y Ley de MorganA1 ∨ A2 ∨ . . . ∨ An ← B1 ∧ B2 ∧ . . . ∧ Bm
(INAOE) 2012 21 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Nociones de Logica
• Clausulas de Horn (a lo mas una literal positiva):H ← B1, . . . ,Bm
A← (hecho)A← B,C, . . . (regla)← B,C, . . . (querie)
(INAOE) 2012 22 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Hechos
• Hechos: declaran relaciones entre objetos (cosas queson verdaderas). E.g.:
quiere(juan, maria). suma(2,3,5).valioso(oro). clase(prolog,eduardo).papa(juan,juanito). papa(juan,juana).papa(rival,ana). papa(juanito,pepe).papa(juanito,patricia). mama(maria,juanito).mama(maria,juana). mama(maria,ana).
• A las relaciones tambien se les llama predicados.
(INAOE) 2012 23 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Queries
• Queries: forma de obtener informacion de un programalogico.
• Un querie pregunta si se cumple alguna relacion entreobjetos.
• Un hecho dice que P es verdadero.Una querie pregunta si P es verdadero.
(INAOE) 2012 24 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Queries
• Las preguntas tambien son “metas”.?- papa(juan,juana).yes?- suma(1,1,2).no (si no esta definido)
• El contestar una pregunta es determinar si la preguntaes una consecuencia logica del programa.
(INAOE) 2012 25 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Consecuencias Logicas
• Las consecuencias logicas se obtienen aplicandoreglas de inferencia.
• Preguntar usando variables es como construir muchaspreguntas a la vez.
• Una pregunta con variables, pregunta si existe un valorpara las variables que haga la pregunta unaconsecuencia logica del programa.
(INAOE) 2012 26 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Variables
• Si queremos preguntar quien es el papa de ana:?- papa(juan,ana).?- papa(juanito,ana).?- papa(maria,ana)....?- papa(rival,ana).
• Podemos hacerlo tambien como:?- papa(X,ana).X = rival
• Pregunta por instancias de X que hacen que se cumplala relacion.
(INAOE) 2012 27 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Variables• Las variables en logica (entidades sin especificar) son
diferentes de las variables en programasconvencionales (localizacion en memoria).
• Pueden existir varias soluciones (instancias)?- mama(maria,X).X = juana;X = juanito;X = ana;no
• Suponiendo que tenemos la tabla de “suma”:?- suma(X,Y,4).X = 0, Y = 4; X = 1, Y = 3; X = 2, Y = 2;X = 3, Y = 1; X = 4, Y = 0;no?- suma(X,X,4).X = 2
(INAOE) 2012 28 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Variables
• Pueden existir variables en hechos. En lugar de tenerque declarar algo que sucede para todos, e.g.:gusta(juan,mole).gusta(juana,mole).gusta(juanito,mole)....gusta(rival,mole).
• Podemos tener variables en los hechos (e.g., a todosles gusta el mole):gusta(X,mole).
(INAOE) 2012 29 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Variables
mult(0,X,0).?- mult(0,4,0).yessuma(0,X,X).?- suma(0,2,2).yes?- suma(0,3,Y).Y = 3.
(INAOE) 2012 30 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Varias queries
• Tambien podemos hacer varias preguntas a la vez:?- papa(juan,juanito), papa(juanito,pepe).yes?- papa(juan,X), papa(X,pepe).i.e., existe una persona que sea hijo de juan y papa depepe?X = juanito
(INAOE) 2012 31 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Varias queries
• ?- papa(juan,X), papa(X,Y).i.e., dame los nietos de juan.X = juanito, Y = pepe;X = juanito, Y = patricia;no
• Lo podemos restringir: ?- papa(juan,X), hombre(X).
(INAOE) 2012 32 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Reglas
• Las reglas se pueden ver de dos formas: procedural ydeclarativa. Una regla se escribe con el siguienteformato:
A← B1,B2, . . . ,Bn
Donde: A = cabeza de la regla y B1,B2, . . . ,Bn = cuerpode la regla.
• Procedural: son medios de expresar nuevas/complejasqueries en terminos de mas sencillas.
• Declarativa: definen nuevas/complejas relacionesusando relaciones existentes. Interpreta a la reglacomo un axioma logico.
(INAOE) 2012 33 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Nociones de Logica
Reglas
hijo(Y,X) :- papa(X,Y), hombre(Y).hija(Y,X) :- papa(X,Y), mujer(Y).abuelo(X,Z) :- papa(X,Y), papa(Y,X).
• Procedural: para contestar ?- hijo(X,juan). hay quecontestar?- papa(juan,X), hombre(X).
• Declarativo: para toda X y Y , Y es el hijo de X si X esel padre de Y y Y es hombre.
(INAOE) 2012 34 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con Logica
• Como sabemos que un programa logico dice lo quequeremos que diga?
• El significado de un programa logico P (o su modeloM(P)), es el conjunto de todos los hechos quepodemos deducir de P.
• Hay muchas reglas de inferencia
(INAOE) 2012 35 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con Logica
• e.g., modus ponens, modus tolens, ...P → QP——QP → Q¬Q——¬P
(INAOE) 2012 36 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con Logica
• La mas estudiada es resolucion: por ser refutationcomplete (deduce todo lo que se puede por refutacion)y correcta o sound (todo lo que deduce es cierto).
• El corazon del modelo de computacion de programaslogicos es el algoritmo de unificacion.
• Ejemplo de resolucion:P → QP ←——Q
(INAOE) 2012 37 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con Logica
• Un unificador de dos terminos es una substitucion quehace los dos terminos iguales.
• El unificador mas general o mgu es un unificador talque si existe otro unificador este es mas especıfico (elmgu es unico).
• Dada una clausula C con una literal L1, del ladoizquierdo y otra clausula D con una literal L2 del ladoderecho, tal que L1 y L2 tienen un mgu(θ), podemosconstruir una nueva clausula con la union de C y D sinL1 y L2:
((C − {L1}) ∧ (D − {L2}))θ
(INAOE) 2012 38 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con Logica
• En general hay que encontrar instanciaciones pormedio de unificacion.hijo(X,Y) :- papa(Y,X).papa(juan,juanito).——————— Θ = [Y/juan, X/juanito]hijo(juanito,juan).
• alumno(X,progIA) :- estudia(X,prolog).es de univ(A,Univ) :- alumno(A,Materia),imparte(Univ,Materia).——————— Θ = [B/X/A, progIA/Materia]es de univ(B,Univ) :- estudia(B,prolog),imparte(Univ,progIA).
(INAOE) 2012 39 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con Logica
• Para demostrar que algo es consecuencia logica (i.e.,T |= A), se hace prueba por refutacion (i.e., anadimos¬A a T y demostramos que podemos llegar a unainconsistencia) A ∧ T ` �.
• Cuando hacemos una querie, en realidad estamosbuscando inconsistencias (es como agregar ¬querie anuestra teorıa y demostrar (con resolucion) unainconsistencia.
• Cuando hay variables involucradas, obtenemosinstanciaciones con valores particulares.
(INAOE) 2012 40 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Algoritmo de un interprete de programaslogicos.
Input: dado un programa logico P y una meta GOutput: Gθ, si esta es una instancia de G deducible de Po fracasoInicializa: resolvente = Gwhile resolvente 6= {�} do
escoge una meta A del resolvente y una clausulaA′ ← B1,B2, . . . ,Bn, tal que A y A′ unifican con un mguθQuita A de resolvente y anade B1,B2, . . . ,BnAplica θ a resolvente y a G
end while
(INAOE) 2012 41 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Ejemplo
Teoria: Querie:
papa(juan,juanito). (b) ?- abuelo(X,Y).papa(juan,juana). ?- papa(X,Z), papa(Z,Y).papa(juanito,pepe).papa(juanito,patricia). (a)abuelo(A,B):- papa(A,C), papa(C,B).
Si tomamos la segunda clausula con (a):?- papa(X,juanito) [Y = patricia]Tomando esta con (b):[X = juan, Y = patricia]G = abuelo(X,Y)Θ1Θ2 = abuelo(juan,patricia).
(INAOE) 2012 42 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con logica
• El razonamiento con resolucion es un procesocombinatorio. En general, hay muchas inferencias quese pueden hacer cada vez que se hace una.
• Hay diferentes formas de control (i.e., escoger cualhacer). Lo mas facil es hacer deducciones en un ordenfijo (aunque sea arbitrario): esto es lo que hace Prolog
• Existen otros (e.g., MRS) donde se puede expresar elcontrol, sin embargo es mas ineficiente.
(INAOE) 2012 43 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Relacion con logica
Estrategia de Prolog:• Escoge la meta mas a la izquierda• Busca secuencial con backtracking• Si hacemos el mismo ejemplo pero siguiendo la
estrategia de Prolog:?- papa(X,Y), papa(Z,Y)la primera con (b):?- papa(juanito,Y) [X = juan]con la tercera:[Y = pepe]
(INAOE) 2012 44 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Ejemplo
• Otro ejemplo para ilustrar el caso mas sencillo debacktracking:gusta(maria,comida).gusta(maria,vino).gusta(juan,vino).?- gusta(maria,X), gusta(juan,X).
• En otras palabras, actua como un stack (depth-firstsearch).
(INAOE) 2012 45 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Ejemplo
• Esto provoca que:1 El orden de las reglas determina el orden en que las
soluciones se encuentran2 El orden de las metas (en los cuerpos de las reglas)
determina el arbol de busqueda.
(INAOE) 2012 46 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Ejemplo
hijo(X,Y) :- padre(Y,X), hombre(X).hijo(X,Y) :- madre(Y,X), hombre(X).abuelo(X,Z) :- padre(X,Y), padre(Y,Z).abuelo(X,Z) :- padre(X,Y), madre(Y,Z).abuelo(X,Z) :- madre(X,Y), padre(Y,Z).abuelo(X,Z) :- madre(X,Y), madre(Y,Z).Alternativa:procreador(X,Y) :- madre(X,Y).procreador(X,Y) :- padre(X,Y).hijo(X,Y) :- procreador(Y,X), hombre(X).abuelo(X,Z):- procreador(X,Y), procreador(Y,Z).
(INAOE) 2012 47 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Relacion con Logica
Disjuncion
• P :- Q ; R.P :- Q.P :- R.P :- Q, R ; S, T, U.P :- (Q,R) ; (S,T,U).
• Hacer trace de:gusta(maria, comida).gusta(maria,vino).gusta(juan, vino).gusta(juan, maria).?- gusta(maria,X), gusta(juan,X).
(INAOE) 2012 48 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Sintaxis
terminos
terminos simples
constantes{
numerosatomos
variablesestructuras (terminos compuestos)
(INAOE) 2012 49 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Sintaxis
• e.g., de numeros: 1, 2, 0 (en algunos casos haysubdivisiones en reales y enteros).
• e.g., de atomos: a, ’B’, c d, ...• e.g., de variables: A, a, +• e.g., de estructuras: libro(autor,tıtulo,ano).
(INAOE) 2012 50 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Sintaxis
• Existen diferentes formas de representar estructuras.Estas estan definidas por su nombre y numero deargumentos: functor/arity.curso(prolog,lunes,11,14,eduardo,morales,ccc,8301).vs
curso(prolog,horario(lunes,11,14),profesor(eduardo,morales),lugar(ccc,8301)).
maestro(Mat,Maestro):-curso(Mat,Horario,Maestro,Lugar).
duracion(Mat,Tiempo):-curso(Mat,horario(Dia,TiempoI,TiempoF),Prof,Lugar),suma(TiempoI,Tiempo,TiempoF).
(INAOE) 2012 51 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Sintaxis
• vsdia(prolog,lunes).tiempoI(prolog,11).tiempoF(prolog,14).profesor nombre(prolog,eduardo)....
(INAOE) 2012 52 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Apareo vs. unificacion
• Se pueden tener estructuras dentro de los argumentos.
If S y T son Constantes y S = TIf S = Variable, aparea e instancıa S a TIf S y T son estructuras, S y T aparean si
S y T tienen el mismo nombre y sus argumentosaparean
(INAOE) 2012 53 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Ejemplo
• E.g., de geometrıa:P1 = punto(1,1).P2 = punto(2,3).L = linea(P1,P2) = linea(punto(1,1),punto(2,3)).T = triangulo(P3,P4,P5) =triangulo(punto(4,2),punto(6,4),punto(7,1)).vertical(linea(punto(X,Y),punto(X,Z))).horizontal(linea(punto(X,Y),punto(Z,Y))).
(INAOE) 2012 54 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Ejemplo
• Podemos decir:?- vertical(linea(punto(1,8),punto(1,2))).yes?- vertical(linea(punto(2,3),X)).X = punto(2, )?- vertical(S), horizontal(S).S = linea(punto(X,Y),punto(X,Y))
(INAOE) 2012 55 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Apareo vs. unificacion
• Que le falta para hacer unificacion?• “occur check”: e.g. X = f(X) o X = f(a,g(X),b)
(INAOE) 2012 56 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Reglas Recursivas
padre(juanito, pepe).padre(pepe, luis).padre(luis, carlosI).ancestro(X,Y) :- padre(X,Y).ancestro(X,Z) :- padre(X,Y), ancestro(Y,Z).?- ancestro(juanito, carlosI).Probar con diferentes ordenes de las reglas y del cuerpo dela segunda regla.
(INAOE) 2012 57 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Reglas Recursivas
• Con todo tipo de pregunta:12 :- A,B2 :- A,B1
• Solo si existe el ancestro12 :- B,A
• Loop todo el tiempo2 :- B,A1
(INAOE) 2012 58 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Reglas Recursivas
• Problemas: hacer recursiones en donde se llama ası mismo (sin ningun cambio) de nuevo: e.g.,P :- P.casado(X,Y) :- casado(Y,X).padre(X,Y) :- hijo(Y,X).hijo(A,B) :- padre(B,A).
(INAOE) 2012 59 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Reglas Recursivas
• El orden optimo varıa con el uso, e.g.:a) abuelo(X,Z) :- padre(X,Y), padre(Y,Z).vs.b) abuelo(X,Z) :- padre(Y,Z), padre(X,Y).a) si ?- abuelo(nombre,Var).b) si ?- abuelo(Var,Nombre).
(INAOE) 2012 60 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Otros parecidos
liga(a,b). liga(b,d).liga(a,c). liga(d,e).liga(c,d). liga(c,f).
conecta(Nodo1,Nodo2) :- liga(Nodo1,Nodo2).conecta(Nodo1,Nodo2) :- liga(Nodo1,Nodo3),
conecta(Nodo3,Nodo2).
sucesor(1,2).sucesor(2,3).sucesor(3,4).
...
menor(Num1,Num2) :- sucesor(Num1,Num2).menor(Num1,Num2) :- sucesor(Num1,Num3),
menor(Num3,Num2).(INAOE) 2012 61 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Monkey and Banana
• Acciones (movs.):• tomar el platano• subir a la caja• empujar la caja• caminar
(INAOE) 2012 62 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Monkey and Banana
• Descriccion:edo(PosHorizMono,PosVertMono,PosCaja,TienePlatano).
• PosHorizMono: puerta, ventana, centro• PosVertMono: piso, sobre caja• PosCaja: puerta, ventana, centro• TienePlatano: si, no
(INAOE) 2012 63 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Monkey and Banana
• Representar cambios de estado con 3 argumentos:mov(estado1, accion, estado2).
• tomar platano:mov(edo(centro,sobre caja,centro,no),toma,
edo(centro,sobre caja,centro,si)).
• subir:mov(edo(X, piso, X, Y), sube, edo(X, sobre caja, X, Y)).
• empuja:mov(edo(X, piso, X, Y), empuja(X,Z), edo(Z, piso, Z, Y)).
• camina:mov(edo(X, piso, Y, Z), camina(X,W), edo(W, piso, Y,Z)).
(INAOE) 2012 64 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Monkey and Banana
• Para ver si puede comer (hacer trace de):?- come(edo(puerta,piso,ventana,no)).come(edo( , , ,si)).come(Edo1) :-
mov(Edo1, Acc, Edo2),come(Edo2).
(INAOE) 2012 65 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Monkey and Banana
• El orden de los movimientos, implica una preferencia deacciones. Cambiando el orden podriamos inclusivenunca llegar a la solucion (e.g., si ponemos el ultimomovimiento al principio, se la pasarıa caminando!).
(INAOE) 2012 66 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Aritmetica en Logica
• Aunque Prolog tiene mecanimos para manejo dearitmetica, estos pierden su sentido logico, sin embargo,podemos mantenerlo con los axiomas de Peano.0, s(0), s(s(0)), ...numero(0).numero(s(X)) :- numero(X).menor igual(0,X) :- numero(X).menor igual(s(X),s(Y)) :- menor igual(X,Y).minimo(N1,N2,N1) :- menor igual(N1,N2).minimo(N1,N2,N2) :- menor igual(N2,N1).
suma(0,X,X) :- numero(X). (0 + X = X)suma(s(X),Y,s(Z)) :- suma(X,Y,Z). (s(X) + Y = s(X + Y))
f (A1,A2, . . . ,An) => p(A1,A2, . . . ,An,An+1)
(INAOE) 2012 67 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Sintaxis
Aritmetica en Logica
• Podemos decir: suma(Num1,Num2,X),suma(Num1,X,Num2), suma(X,Y,Num3), etc. E.g.,suma(s(0),s(s(0)),X), suma(s(A),X,s(s(s(0)))),suma(X,Y,s(s(s(0)))), etc.
• Ventajas: se le pueden dar diferentes usos al programa.• Restricciones: suma(X,Y,Z) :- par(X), impar(Y).
mult(0,X,0).mult(s(X),Y,Z) :- mult(X,Y,W), suma(W,Y,Z).
(INAOE) 2012 68 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Listas
• [a,b,c] = .(a,.(b,.(c,[])))• lista vacia = []
lista en general: [H|T] (H = head, T = Tail)[H|T] = [a,b,c] => H = a, T = [b,c]= [a|[b,c]]= [a,b|[c]]= [a,b,c|[]][a,b,c,d,e] = [a,b,c|T] => T = [d,e]
(INAOE) 2012 69 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Listas
• Podemos definir lista como:es lista([]).es lista([H|T]) :- es lista(T).
anade(El,Lista,[El|Lista]).
elemento(X,[X|T]).elemento(X,[ |T]):-
elemento(X,T). (usos)
quita(El,[El|L],L).quita(El,[H|T],[H|R]):-
quita(El,T,R).
(INAOE) 2012 70 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Listas• Tambien para anadir un elemento en diferentes lugares:
quita(a,L,[b,c,d])
elemento(El,L) :- quita(El,L, ).
anade(El,Lista1,Lista2) :- quita(El,Lista2,Lista1).
prefijo([],L).prefijo([X|T],[X|R]):- prefijo(T,R). (usos)
sufijo(L,L).sufijo(L,[H|T]):- sufijo(L,T). (usos)
sublista(L1,L2):-prefijo(L3,L2),sufijo(L1,L3).
sublista(L1,L2):-prefijo(L1,L3),sufijo(L3,L2).
(INAOE) 2012 71 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Listassublista(L1,L2):- prefijo(L1,L2).sublista(L1,[H|T]):- sublista(L1,L2).
append([],L,L).append([H|L1],L2,[H|L3]):-
append(L1,L2,L3). (usos)
adyacentes(X,Y,L) :- append( ,[X,Y| ],L).
prefijo(L1,L2):- append(L1,X,L2).
sufijo(L1,L2):- append(X,L1,L2).
sublista(L1,L2) :-append(X,Y,L2),append(L1,Z,Y).
(INAOE) 2012 72 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Listassublista(L1,L2):-
append(X,Y,L2),append(Z,L1,X).
member(X,L) :- append(Y,[X|Z],L).
member(X,L) :- sublista([X,L).
last(X,[X]).last(X,[ |T]):- last(X,T).
last(X,L) :- append(Y,[X],L).
long([],0).long([H|T],s(N)):- long(T,N).
(INAOE) 2012 73 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Listas
• Si queremos guardar las acciones que hace el monopodemos anadir un argumento extra:come(edo( , , ,si),[]).come(Edo1,[Acc|Resto]) :-
mov(Edo1, Acc, Edo2),come(Edo2,Resto).
(INAOE) 2012 74 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Permutacion
(A) : permuta el resto y anade un elementopermuta([],[]).permuta([El|L],Perm):-
permuta(L,LP),anade(El,LP,Perm).
(B) : quita 1 elemento y permuta el restopermuta([],[]).permuta(L,[El|R]):-
quita(El,L,L2),permuta(L2,R).
(INAOE) 2012 75 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Permutacuon
• Si preguntamos: permuta(L,[a,b,c]).(A) nos da las primeras 6 soluciones y despues se cicla(B) nos da solo la primera y despues se cicla
• Voltea una lista:voltea([],[]).voltea([H|T],Vol):-
voltea(T,TVol),append(TVol,[H],Vol).
(INAOE) 2012 76 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Listas
• Sin embargo, ocupa mucha memoria. Un “truco” comunen Prolog (y Lisp) es inlcuir un argumento extra para irguardando los resultados parciales (un acumulador) yvolverla tail recursive.voltea(L,LV) :- voltea(L,[],LV).
voltea([],L,L).voltea([H|T],Acum,Vol):-
voltea(T,[H|Acum],LVol).
(INAOE) 2012 77 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Palindrome
• Palindrome lo podemos definir asi:palin([]).palin([ ]).palin([H|T]):-
append(EnMedio,[H],T),palin(EnMedio).
• Alternativamente:palin(L) :- voltea(L,L).
(INAOE) 2012 78 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Aplana
• Aplana:aplana([],[]).aplana([H|T],Res) :-
aplana(H,HP),aplana(T,TP),append(HP,TP,Res).
aplana(X,[X]).
(INAOE) 2012 79 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Listas
Aplana
• Podemos hacer una version con una lista intermediapara evitar el “append”aplana(List,ListPl) :- aplana(List,[],ListPl).
aplana([],L,L).aplana([H|T],L1,L3) :-
aplana(H,L1,L2),aplana(T,L2,L3).
aplana(X,S,[X|S]).
(INAOE) 2012 80 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Aritmetica
• “is”• Valor is Expresion => evalua expresion y unifica el
resultado a valor?- X is 3 + 5.X = 8?- 8 is 3 + 5.yes?- 3 + 5 is 3 + 5.no
(INAOE) 2012 81 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Aritmetica
• Expresion debe de evaluar a algo (si no falla) X is 5 + Ysolo si “Y” tiene un valor asignado
• “is” no es funcion de asignacion X is X + 1 falla!!suma(X,Y,Z) :- Z is X + Y.
Asumiendo que X y Y tiene valores asignados (luegoveremos como podemos asegurar esto).
(INAOE) 2012 82 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Aritmetica
• Otros operadores matematicos:−, ∗, /,mod , >,<,>=,=<,=:=,= \\ =
• Factorial: Idea: fact(n) = n*fact(n-1).factorial(N,F) :-
N > 0,N1 is N - 1,fact(N1,F1),F is N * F1.
factorial(0,1).
(INAOE) 2012 83 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Aritmetica
• Podemos mejorarlo si anadimos uno (o dos)argumentos extras. Una forma manteniendo uncontador hacia arriba (desde 0 hasta N), la otramanteniendo un contador hacia abajo (desde N hasta0).fact(N,F) :- fact(0,N,1,F).
fact(I,N,T,F) :-I < N,I1 is I + 1,T1 is T * I1,fact(I1,N,T1,F).
fact(N,N,F,F).
(INAOE) 2012 84 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Aritmetica
• Alternativamente:fact(N,F) :- fact(N,1,F).
fact(N,T,F) :-N > 0,T1 is T * N,N1 is N - 1,fact(N1,T1,F).
fact(0,F,F).
(INAOE) 2012 85 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Aritmetica
• Un ejemplo parecido en donde se puede usar unargumento extra para guardar resultados intermedios:suma todos los elementos de una listasumalista([],0).sumalista([H|T],Res) :-
sumalista(T,Res1),Res is Res1 + H.
sumalista(L,R) :- sumalista(L,0,R).
sumalista([H|T],Inter,R) :-Inter1 is Inter + H,sumalista(T,Inter1,R).
sumalista([],R,R).
(INAOE) 2012 86 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Aritmetica
• Al usar “is” muchas veces depende del uso que ledemos al programa. Por ejemplo si queremos obtenerla longitud de una lista de elementos.
• Conocemos N y queremos construir listas (al revesmarca error)long([H|T],N) :-
N > 0,N1 is N - 1,long(T,N1).
long([],0).
(INAOE) 2012 87 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Ejemplo
• Conocemos la lista y queremos conocer la longitud (alreves se cicla)long([],0).long([ |T],N) :-
long(T,N1),N is 1 + N1.
(INAOE) 2012 88 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Ejemplo (cont).
long([ |T],N) :-long(T,N1),N = 1 + N1.
long([ |T],N) :-N is = 1 + N1.long(T,N1),
long([H|T],1 + N) :-long(T,N1),
?- long([a,b,c],N), Long is N.
(INAOE) 2012 89 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Aritmetica
Ejemplo
• Usando sucesor el codigo es mas sencillo y se puedeusar de las dos formas:long([H|T],s(N)) :-
long(T,N).long([],0).
(INAOE) 2012 90 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Algunos Ejemplos
Ordena Listas
• Ordena Listas• Una idea poco eficiente es hacer permutaciones y
checar que este en orden:sort(L,LO) :-
permuta(L,LO),orden(LO).
orden([A,B|T]) :-A < B,orden([B|T]).
orden([ ]).
(INAOE) 2012 91 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Algunos Ejemplos
Ordena Listas
• Una solucion un poco mejor es insertar el elemento enel lugar que le corresponde:sort([H|T],LO) :-
sort(T,TO),inserta(H,TO,LO).
sort([],[]).
inserta(H,[],[H]).inserta(H,[F|T],[F|R]) :-
H > F,inserta(H,T,R).
inserta(H,[F|R],[H,F|R]) :-H =< F.
(INAOE) 2012 92 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Algunos Ejemplos
Ordena ListasQuicksort: dividir en menores y mayores a un ciertoelemento, ordenarlos y juntarlos todos.
qsort([H|T],LO) :-divide(H,T,Men,May),qsort(Men,MenO),qsort(May,MayO),append(MenO,[H|MayO],LO).
qsort([],[]).
divide(El,[H|T],[H|Men],May) :-El > H,divide(El,T,Men,May).
divide(El,[H|T],Men,[H|May]) :-El < H,divide(El,T,Men,May).
divide( ,[],[],[]).
(INAOE) 2012 93 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Algunos Ejemplos
Ordena Listas
• Mejora: tener una lista intermedia que sirva deacumuladorqsort(L,LO) :- qsort(L,[],LO).
qsort([H|T],Acum,LO) :-divide(H,T,Men,May),qsort(May,Acum,MayO),qsort(Men,[H|MayO],LO).
qsort([],L,L).
(INAOE) 2012 94 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Algunos Ejemplos
Mini-aplicacion: NDFA
• Representacion: trans(Edo1, Simbolo, Edo2).,trans vacio(Edo1,Edo2).,final(Edo).acepta(Edo,[]) :-
final(Edo).acepta(Edo,[H|T]) :-
trans(Edo,H,NEdo),acepta(NEdo,T).
acepta(Edo,String) :-trans vacio(Edo,NEdo),acepta(NEdo,String).
(INAOE) 2012 95 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Algunos Ejemplos
Mini-aplicacion: NDFA
trans(s1,0,s1). trans(s1,1,s2).trans(s1,0,s4). trans(s2,0,s2).trans(s2,0,s3). trans(s3,1,s5).trans vacio(s4,s2). final(s5).
?- acepta(s1,[0,1,0,1]).yes?- acepta(X,[0,0,1]).X = s1; X = s2; X = s4?- acepta(s1,[X,Y,Z]).X = 1, Y = 0, Z = 1;X = 0, Y = 0, Z = 1
?- Sol = [ , , ], acepta(s1, Sol).Sol = [1,0,1]; Sol = [0,0,1]
(INAOE) 2012 96 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Algunos Ejemplos
Mini-aplicacion: NDFA
• Si le ponemos un ciclo de transiciones vacıas entoncespodemos caer en loops infinitos si el string que se le dano es una solucion (y en ciertos casos, aunque sea unasolucion): e.g., trans vacio(s2,s4). y ?- acepta(s1,[1]).
(INAOE) 2012 97 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Antes solo un recordatorio: las variables logicas nopermiten asignacion destructiva. Una vez asignado unvalor ese se le queda a menos que se le quite pormedio de backtracking
• Toda la manipulacion de datos se hace por medio deunificacion
• El programador puede afectar la ejecucion de unprograma cambiando el orden de las clasulas y de lasmetas
(INAOE) 2012 98 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Prolog tiene un predicado especial llamado “CUT” (!)que puede afectar el comportamiento procedural de losprogramas
• Con el ! podemos prevenir Backtracking• Funcion principal: reducir el espacio de busqueda de
soluciones cortandolo dinamicamente
(INAOE) 2012 99 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Puede eliminar facilmente el sentido declarativo de losprogramas!!,
• Para ver su uso mas facil, consideremos una funcionque tiene predicados mutuamente exclusivos. e.g., unafuncion escalon:f(X,0) :- X < 3.f(X,2) :- X >= 3, X < 6.f(X,4) :- X >= 6.
• Si preguntamos: ?- f(1,Y), 2 < Y. Prolog a traves delbacktracking trata 2 soluciones que se ven que van afallar
(INAOE) 2012 100 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Las 3 reglas son mutuamente exclusivas por lo que enel momento de que una jala, no tiene sentido en tratarcon las otras 2. Esto puede hacerse con el !.f(X,0) :- X < 3, !.f(X,2) :- X >= 3, X < 6, !.f(X,4) :- X >= 6.
(INAOE) 2012 101 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Todavıa podemos reducir mas el codigo: Idea: si laprimera clausula falla ya sabemos que X >= 3 (lomismo para la primera condicion de la tercera clausula)f(X,0) :- X < 3, !.f(X,2) :- X < 6, !.f(X,4).
• En principio da el mismo resultado, pero le quitamos elsentido logico (si le quitamos los cuts nos da variassoluciones)
(INAOE) 2012 102 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Para entender mas claramente la funcion del CUT:• Meta Padre: la meta que apareo la cabeza de la
clausula que tiene el !• Cuando se encuentra el ! como meta, esta se cumple,
pero “compromete” al sistema a todas las opcioneshechas entre la meta padre y el ! (i.e., las otras posiblesopciones entre la meta padre y el ! se eliminan)
H : −B1,B2, . . . ,Bn, !,Bn+1, . . . ,Bz .
(INAOE) 2012 103 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• e.g., (poner arbol AND/OR)P :- Q, R.P :- S, !, T.P :- U, V.A :- B, P, C.
• Afecta el comportamiento de “P” pero no de “A”
(INAOE) 2012 104 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Usos:• decirle que ya encontro una solucion correcta• decirle que si llegaste ahı, entonces falla (en conjuncion
con fail)
(INAOE) 2012 105 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• Que hace ! ?• poda todas las clausulas debajo de esta• poda todas las posibles soluciones al lado izquierdo del
cut• no afecta el lado derecho
(INAOE) 2012 106 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Control
• e.g.,max(X,Y,X) :- X >= Y, !.max(X,Y,Y) :- X < Y.
De hecho Bratko en su libro quita la condicion de la 2aclausula, sin embargo esto solo funciona si preguntaspor el Max, pero falla si preguntas: ?- max(4,2,2).
• Posible solucion:max(X,Y,Z) :- X >= Y, !, Z = X.max(X,Y,Y).
(INAOE) 2012 107 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Ejemplo
• Puede servir para salirse al encontrar la 1a. solucionmember ck(H,[H| ]) :- !.member ck(H,[ |T]) :-
member ck(H,T).
• Anade un elemento, pero solo si no esta en la lista:anade(E,L,L) :- member(E,L), !.anade(E,L,[E|L]).
• Es difıcil hacer lo mismo sin el !
(INAOE) 2012 108 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• true siempre se cumple• fail siempre falla
(INAOE) 2012 109 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• En particular el ! se puede usar en conjuncion con failpara indicar que si ya llegaste ahi entonces falla, i.e., !,fail.
• E.g.,impuesto(X,N) :- desempleado(X), !, fail.impuesto(X,N) :- sueldo(X,Sx), Sx < 4*Min, !, fail.impuesto(X,N) :- ...
(INAOE) 2012 110 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• Por ejemplo para indicar a menos que:gusta(Maria,X) :- vibora(X), !, fail.gusta(Maria,X) :- animal(X).
gusta(Maria,X) :-( vibora(X), !, fail; animal(X) ).
(INAOE) 2012 111 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• Usando la misma idea:diferente(X,X) :- !, fail.diferente(X,Y).
diferente(X,Y) :-( X = Y, !, fail; true ).
(INAOE) 2012 112 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• not: aunque los Prologs tienen definido NOT, lopodemos definir en terminos de ! y failnot(P) :- P, !, fail.not(P).
Aqui si cambiamos el orden cambia el sentido!!
(INAOE) 2012 113 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• Generalmente not se define como \+gusta(maria,X) :- animal(X), \+ vibora(X).diferente(X,Y) :- \+ X = Y.
(INAOE) 2012 114 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• Cuando se usa \+ el orden de las reglas es escencial.Lo que hace Prolog es Negacion por Falla con CWA(i.e., si no lo puede probar, entonces asume que esfalso)
• NO es negacion logica y puede tener problemas:est soltero(X) :-\+ casado(X),estudiante(X).
estudiante(juan).casado(pepe).
?- est soltero(X)
(INAOE) 2012 115 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• Asi falla sin considerar a juan, sin embargo, sicambiamos el orden de las literales en la regla, si secumple. Otros casos que ilustran esto:?- \+ X = 1, X = 2
r(a).q(b).p(X) :- \+ r(X).?- q(X), p(X).X = b.?- p(X), q(X).nop(s(X)) :- p(X).q(a).?- \+ (p(X), q(X)).
(INAOE) 2012 116 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Negacion por falla
• Sin embargo, podemos usarlo en ciertos casos:gusta(X,Y) :- animal(X), \+ vibora(X).
conj disj(C1,C2) :-\+ (member(X,C1), member(X,C2)).
(INAOE) 2012 117 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
CUTs
• Los CUTs se pueden clasificar en:• Verdes: no afectan el sentido declarativo (recortan
posibles caminos que no dan soluciones nuevas)• Rojos: afectan el sentido declarativo (recortan
condiciones explıcitas)
(INAOE) 2012 118 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
CUTs
• p :- a,b. =⇒ (a ∧ b) ∨ cp :- c.
• p :- a,!,b. =⇒ (a ∧ b) ∨ (¬a ∧ c)p :- c.
• p :- c. =⇒ c ∨ (a ∧ b)p :- a,!,b.e.g., (de nuevo recordar la definicion de MAX)
(INAOE) 2012 119 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
CUTs
• Los CUTs rojos eliminan pruebas y a veces sonnecesarios, pero hay que tener mucho cuidado porqueesto afecta el sentido del programa. Un ejemplo util, esdefiniendo If-Then-Elseifthenelse(P,Q,R) :- P, !, Q.ifthenelse(P,Q,R) :- R.
• Ponerlo “bien” serıa anadir en la segunda regla: \+ notP, R, pero evaluar \+ P puede ser MUY costoso, y dehecho ya lo hicimos una vez (si no, no estarıamos en lasegunda regla)
(INAOE) 2012 120 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
If-Then-Else
• ifthenelse: viene definido en la mayorıa de los Prologscomo: P − > Q ; R
• Notas (sobre los CUTs):• Si la solucion esta determinada NO hace falta• Un CUT se debe de poner en el punto exacto en donde
se sabe que es la rama correcta del arbol de prueba• Hay que tener cuidado de no mover “calculos” antes del
CUT ya que pueden fallar y hacer que no se llegue alCUT
(INAOE) 2012 121 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
CUTs
• Usos de CUTs rojos: (i) obtener la primera solucion (ii)obtener un efecto if-then-else. E.g.,primera(Meta) :- call(Meta), !.
(INAOE) 2012 122 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Ejemplo
aplana(L,LA) :- aplana(L,[],LA).
aplana([],L,L) :- !.aplana([H|T],L1,L) :-
!,aplana(H,L1,L2),aplana(T,L2,L).
aplana(X,L,[X|L]).
Aqui los CUTs de las dos primeras clausulas, son para darlesentido a la ultima!!. Deberıamos de tener en lugar de losCUTs, en la ultima:X = [], X = [ | ].
(INAOE) 2012 123 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Control
Ejemplo
?- aplana([],X).X = []?- X = [ ], aplana([],X).X = [[]]
Que paso? El ! debe ponerse tan pronto que se determineque el camino de prueba es el correcto: i.e., aplana([],L1,L):- !, L1 = L.
(INAOE) 2012 124 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Selectores
atom(X).integer(X).atomic(X) :- atom(X) ; integer(X).var(X).nonvar(X).
?- var(X), X = 2.X = 2?- X = 2, var(X).no
?- atom(2).no?- atomic(2).yes
(INAOE) 2012 125 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Igualdades
X = YX is Expr1Exp1 =:= Exp2Exp1 =\= Exp2T1 == T2T1 \== T2
(INAOE) 2012 126 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Acceso a Predicados
functor(Predicado,Nombre,Aridad).
Usos:1 obtener nombre y numero de args2 construir un predicado
?- functor(papa(juan,juanito),F,N).F = juan, N = 2?- functor(Pred,foo,3).Pred = foo( , , ).
(INAOE) 2012 127 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Acceso a Predicados
arg(N,Pred,Valor).
Usos:1 seleccionar un argumento2 instanciar un argumento
?- arg(2,arbol(6,4,8),X).X = 4?- arg(2,arbol(3,X,7),1).X = 1
(INAOE) 2012 128 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Substituye un elemento por otro
subst(Old,New,Old,New).subst(Old,New,Otro,Otro) :-
atomic(Otro),Otr0 \ = Old.
subst(Old,New,Pred,NPred) :-functor(Pred,F,N),functor(NPred,F,N),subst aux(N,Old,New,Pred,NPred).
subst aux(N,Old,New,Pred,NPred) :-N > 0,arg(N,Pred,ArgN),subst(Old,New,ArgN,NArgN),arg(N,NPred,NArgN),N1 is N - 1,subst aux(N1,Old,New,Pred,NPred).
subst aux(0, , , , ).(INAOE) 2012 129 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Ejemplo
El programa de arriba no toma en cuenta variables. Situvieramos variables, entonces hay que cambiar la primerapor lo siguiente:
subst(Old,New,Var,Var) :- var(Var), !.subst(Old,New,Viejo,New):- atomic(Viejo), Old = Viejo, !.
(INAOE) 2012 130 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
UNIV
• “univ” <=> “=..”• Pred =.. [F|Args]• E.g.,
padre(a,b) =.. [padre,a,b]?- Meta =.. [foo,a,b,c].Meta = foo(a,b,c).?- foo(a,b,c) =.. [P|A].P = foo, A = [a,b,c]
(INAOE) 2012 131 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Crear Predicados
• Con functor y arg o con =.., podemos crear nuevospredicados.
• Podemos definir “univ” en terminos de “functor” y “arg”.
(INAOE) 2012 132 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Functor, Arg y Univ
Si sabemos el predicado y queremos obtener la lista[F|Args]:
univ(Pred,[F|Args]) :-functor(Pred,F,N),args(1,N,Pred,Args).
args(I,N,Pred,[Arg1|Args]) :-I =< N,arg(I,Pred,Arg1),I1 is I + 1,args(I1,N,Pred,Args).
args(I,N, ,[]):- I > N.
(INAOE) 2012 133 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Functor, Arg y UnivSabemos la lista [F | Args] y queremos el predicado:
univ(Pred,[F|Args]) :-long(Args,N),functor(Pred,F,N),args(Args,Pred,1).
args([Arg1|Args],Pred,N) :-arg(N,Pred,Arg),N1 is N + 1,args(Args,Pred,N1).
args([], , ).
long([],0).long([H|T],N) :-
long(T,N1),N is N1 + 1.
(INAOE) 2012 134 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
MaplistMaplist: tener un predicado que queremos aplicar a una listade argumentos (asumiendo que el resultado siempre es elultimo argumento)
maplista( ,[],[]).maplista(F,[L1|T1],[Res1|ResT]) :-
junta(L1,[Res1],Args),Meta =.. [F|Args],call(Meta),maplista(F,T1,ResT).
e.g.,?- maplista(junta,[[[a,b],[c,d]],[[1,2],[3,4]]],X).X = [[a,b,c,d],[1,2,3,4]]
?- maplista(quita,[[a,[b,c,a,d]],[1,[2,1,3,4]]],X).X = [[b,c,d],[2,3,4]]
(INAOE) 2012 135 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Copia
Para copiar una estructura a otra:
copy(Pred,CPred) :-copy(Pred,CPred,[], ).
copy(Var1,Var2,Subst,Subst) :-var(Var1),v member(Var1/Var2,Subst),!.
copy(Var1,Var2,Subst,[Var1/Var2|Subst]) :-var(Var1), !.
copy(Pred,CPred,Subst1,Subst2) :-functor(Pred,F,N),functor(CPred,F,N),copy args(N,Pred,CPred,Subst1,Subst2).
(INAOE) 2012 136 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Copia (cont.)
copy args(0, , ,S,S) :- !.copy args(N,Pred,CPred,S1,S3) :-
arg(N,Pred,ArgN),copy(Arg1,CArg1,S1,S2),arg(N,CPred,CPredN),N1 is N - 1,copy args(N1,Pred,CPred,S2,S3).
v member(A/B,[V1/B| ]) :-A == V1, !.
v member(X,[ |T]) :-v member(X,T).
(INAOE) 2012 137 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Acceso y manipulacion de programa
clause(Head,Body):• “Head” debe de tener el nombre de una clausula y nos
regresa el cuerpo de esta.• Los “hechos” (i.e., con cuerpo vacıo) nos regresa “true”
?- clause(append(X,Y,Z),L).X = [], Y= 348, Z= 348, L=true;X=[ 780| 773], Y= 348, Z=[ 780| 775], L=junta( 773, 348, 775)
Esto nos permite accesar a clausulas que tengamosdefinidas dentro de un programa
(INAOE) 2012 138 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Acceso y manipulacion de programa
Asi como podemos accesar predicados con clause/2,tambien podemos anadir o quitar clasulas con: assert(X) yretract(X). e.g.,
?- entiendo.no?- assert(entiendo).yes?- entiendo.yes?- retract(entiendo).yes?- entiendo.no
(INAOE) 2012 139 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Mas ejemplos
a :- b, c.d :- b, not c.e :- c, f.b.c.
?- a.yes?- assert(f).yes?- e.yes?- retract(c).yes
(INAOE) 2012 140 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Mas ejemplosCon assert y retract podemos anadir o quitar reglas
?- retract((append( , , ) :- append( , , ))).?- assert((append([H|T],L,[H|R]) :- append(T,L,R))).
Variantes: asserta(X), assertz(X), abolish(F/N). e.g.,
?- asserta(foo(a,b)), assertz(foo(b,c)), asserta(foo(a,c)).?- foo(X,Y).
?- functor(Pred,append,3), clause(Pred,Cuerpo),retract((Pred :- Cuerpo)).
Una forma en que podemos usar assert es para guardarsoluciones:lemma(P) :- P, asserta((P :- !)).
(INAOE) 2012 141 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Torres de Hanoi
hanoi(s(0),A,B,C,[A a B]).hanoi(s(N),A,B,C,Movs) :-
hanoi(N,A,C,B,Movs1),hanoi(N,C,B,A,Movs2),append(Movs1,[A a B |Movs2],Movs).
hanoi(1,A,B,C,[A a B]).hanoi(N,A,B,C,Movs) :-
N > 1,N1 is N − 1,lemma(hanoi(N1,A,C,B,Movs1)),hanoi(N1,C,B,A,Movs2),append(Movs1,[A a B |Movs2],Movs).
(INAOE) 2012 142 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Hanoi (cont.)
• Para probarlo, primero resolver en general y luegoinstanciar (para aprovechar los lemmas).hanoi(N,Discos,Movs) :-
hanoi(N,A,B,C,Movs),Discos = [A,B,C].
(INAOE) 2012 143 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Fobonacci
• Un ejemplo clasico es Fibonacci: el numero N deFibonacci (excepto los 2 primeros que es 1) es =f (N − 1) + f (N − 2)
fibo(1,1).fibo(2,1).fibo(N,F) :-
N > 2,N1 is N - 1,fibo(N1,F1),N2 is N - 2,fibo(N2,F2),F is F1 + F2,asserta(fibo(N,F)).
(INAOE) 2012 144 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Fibonacci (cont.)
• Otra forma de hacerlo es guardar los resultados al irhaciendolo.
• Aumentar 2 argumentos mas para tener estosresultados parciales (de N − 1 y de N − 2). Osea:ffibo(2,N,F − 1,F − 2, (F − 1 + F − 2))
ffibo(N,F) :- ffibo(2,N,1,1,F).
ffibo(M,N,F1,F2,F2) :- M >= N.ffibo(M,N,F1,F2,F) :-
M < N,M1 is M + 1,NF2 is F1 + F2,ffibo(M1,N,F2,NF2,F).
(INAOE) 2012 145 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Mas ejemplos
• Una forma para copiar dos terminos es usando assert yretract.
copy(X,Y) :- asserta(’$tmp’(X)), retract(’$tmp’(Y)).
• Un predicado util es repeat:
repeat.repeat :- repeat.
(INAOE) 2012 146 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Usos de repeat
• Por ejemplo para consultar “manualmente” un archivo:consulta(Archivo) :-
see(Archivo),procesa,seen.
(INAOE) 2012 147 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Alternativamente
consult(Archivo) :-open(Stream,Archivo,r),procesa(Stream),close(Stream).
procesa :-repeat,read(Clausula),procesa(Clausula), !.
procesa(X) :-end of file(X), !.
procesa(Clausula) :-asserta(Clausula), fail.
(INAOE) 2012 148 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Variables Globales
• Con assert podemos simular variables globales(aunque le quitan la parte declarativa a los programas,i.e., no usar mucho):actualiza var global(Nombre,Valor) :-
nonvar(Nombre),retract(var global(Nombre, )), !,asserta(var global(Nombre,Valor)).
actualiza var global(Nombre,Valor) :-nonvar(Nombre),asserta(var global(Nombre,Valor)).
(INAOE) 2012 149 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Name
name(Atomo,ListaAscci)
?- name(abc,L).L = [97,98,99]
Aplicacion: gensym (crea un nuevo nombre)
gensym(Prefijo,Valor) :-var(Valor),atom(Prefijo),obten valor(gensym(Prefijo),N),N1 is N + 1,actualiza var global(gensym(Prefijo),N1),concatena(Prefijo,N1,Valor), !.
(INAOE) 2012 150 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Selectores y Acceso a Predicados y Programas
Cont.
obten valor(X,N) :- var global(X,N), !.obten valor(X,0).
concatena(X,Y,XY) :-name(X,LX),name(Y,LY),append(LX,LX,LXY),name(XY,LXY).
(INAOE) 2012 151 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
Todas las soluciones
• A veces queremos obtener todas las soluciones.• Esto permite convertir backtracking en un proceso
iterativo y resuelve el problema de pasar informacion deuna iteracion a la otra por medio de backtracking.
• Predicados: findall, bagof, setof.
(INAOE) 2012 152 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
findall(Var,Pred,Lista).
clases(juan,prolog,miercoles).clases(juan,cocina,jueves).clases(juan,tenis,viernes).clases(maria,ingles,lunes).clases(maria,tenis,jueves).clases(maria,algebra,miercoles).
?- findall(Dia,clases( , ,Dia), Dias).Dias = [miercoles,jueves,viernes,lunes,jueves,miercoels]
?- findall(Materia,clases( ,Materia, ), Materias).?- findall(Nombre/Materia, clases(Nombre,Materia, ),L).?- findall(Clase,clases(juan,Clase, ),L).
(INAOE) 2012 153 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
Cont.Si queremos simularlo podemos guardar una lista desoluciones
findall(X,Meta,Sols) :-( call(Meta),assertz(lista(X)),fail; assertz(lista(fondo)),colecta(Sols)).
colecta(Sols) :-retract(lista(X)), !,( X == fondo, !, Sols = []; Sols = [X|Resto],colecta(Resto)).
(INAOE) 2012 154 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
Cont.
El codigo tiene un pequeno “error”
?- findall(X,member(X,[alto,ancho,fondo,peso,color,marca]),L).L = [alto,ancho]
?- listing(lista).lista(peso).lista(color).lista(marca).lista(fondo).
(INAOE) 2012 155 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
Posible solucionfindall(X,Meta,Sols) :-
( assertz(’todas las sols’([])),call(Meta),assertz(’todas las sols’({X})),fail; encuentra todas’([],Sols)).
encuentra todas’(Inter,Res) :-retract(’todas las sols’(Sol1),!,encuentra todas’(Sol1, Inter, Res).
encuentra todas’([],Res,Res).encuentra todas’({X},Inter,Res) :-
encuentra todas’([X|Inter],Res).(INAOE) 2012 156 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
Otra posibilidadLa otra posibilidad es usar la base de datos interna deProlog que nos da un numero de referencia unico
findall(X,Meta,Sols) :-( recorda(’las sols’,[],MarcaRef),call(Meta),recorda(’las sols’,X, ),fail; encuentra todas’(MarcaRef,[],L)).
encuentra todas’(MarcaRef,Inter, Sol) :-recorded(’las sols’, X, Ref), !,erase(Ref),( Ref = MarcaRef − > Inter = Sol; encuentra todas’(MarcaRef,[X|Inter],Sol)).
Todos los predicados con el mismo nombre y argumentosse guardan con la misma llave. Todos tiene un numero dereferencia unico.
(INAOE) 2012 157 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
Bagof
?- bagof(Materia, clases(N,Materia,D), Mats).N=juan,D=jueves,Mats=[cocina];N=juan,D=miercoles,Mats=[prolog];...
?- bagof(Materia,Diaˆclases(Nombre,Materia,Dia), Mats).Nombre = juan,Mats = [prolog,cocina,tenis];Nombre = maria,Mats = [ingles,tenis,algebra]
(INAOE) 2012 158 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
setof
• setof quita duplicados y ordena• Ejemplo:
?- setof(Materia,DiaˆNombreˆclases(Nombre,Materia,Dia),Mats).Mats = [algebra,cocina,ingles,prolog,tenis]
• Otro ejemplo:copy(A,B) :- setof(X,Aˆ(A=X),[B]).
(INAOE) 2012 159 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Todas las soluciones
bagof (cont.)
• Con numera vars se puede hacer lo siguiente:
variantes(A,B) :-+ + (numera vars(A,0,N),
numera vars(B,0,N),A = B).
verifica(X) :- + + X.
var(X) :- + + X = a, + + X = b.
(i.e., lo unico que instancia a “a” y “b” al mismo tiempoes una variable)
• Otro ejemplo util:ground(Term) :- numera vars(Term,0,0).
(INAOE) 2012 160 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Operadores
• :- op(Numero, Forma, Nombre).• Si tenemos: a * b + c * d => + (* (a,b), *(c,d))• *, + son operadores “infix”
(INAOE) 2012 161 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Operadores
• La definicion (representacion real) se puede ver condisplay:H :- T => :- (H, T).f :- g, h, i => :- (f, ’,’(g, ’,’(h,i)))a :- b,c,d is 3 + 4 => :-(a,’,’(b,’,’(c,is(d,+(3,4))))[1,2,3,4] => .(1,.(2,.(3,.(4,[]))))
• Todo la sintaxis en Prolog esta definida por medio deoperadores.
• La ventaja que tiene es que uno puede definir suspropios operadores!!
(INAOE) 2012 162 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Ejemplo
• Por ejemplo, si quiero escribir: bloqueA sobre bloqueBen lugar de sobre(bloqueA,bloqueB), puedo definir unoperador sobre
• La forma de hacerlo es por medio de (a veces llamados“directivos”): :- op(Numero,Forma,Nombre).:- op(150,xfx,sobre).:- op(200,xfx,es un).
bloqueA sobre bloqueB.juan es un hombre.
(INAOE) 2012 163 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Operadores
El numero o la precedencia dependen de laimplementacion, aunque normalmente esta dada como:
:- op(1200,xfx,’:-’).:- op(1200,fx,[:-,?-]).:- op(1100,xfy,’;’).:- op(1000,xfy,’,’).:- op(500,yfx,[+,-]).:- op(400,yfx,[*,/]).
(INAOE) 2012 164 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Operadores
• Tipos de operadores:infix xfx, xfy, yfxprefix fx, fypostfix xf, yf
f = operador, X y Y = argumentos• Precedencia de argumentos encerrados en parentesis
= 0• X = precedencia < que el operador
Y = precedencia =< que el operador
(INAOE) 2012 165 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Operadores
:- op(500,yfx,+).a + b + c => (a + b) + c
:- op(500,xfy,+).a + b + c => a + (b + c)
not not p => fynot (not p) => fx
• ’:-’tambien puede servir para consultar un programa::- [archivo1, archivo2].
(INAOE) 2012 166 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Ejemplos
a sobre b y b sobre c y c sobre d.
:- op(200,xfx,sobre).:- op(300,xfy,y).
y(sobre(a,b),y(sobre(b,c),sobre(c,d))).
la temperatura de la caldera es 200.
:- op(100,fx,la).:- op(299,xfx,de).:- op(300,xfx,es).
es(de(la(caldera),la(temperatura)),200).
(INAOE) 2012 167 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Operadores
Mas ejemplos
:- op(100,xfx,en).:- op(100,xfx,y).:- op(200,xfx,da).:- op(300,fx,junta).
Elem en [Elem| ].Elem en [ |T] :-
Elem en T.junta [] y L da L.junta [H|L1] y L2 da [H|L3] :-
junta L1 y L2 da L3.
?- a en [1,s,a,d].yes?- junta [1,2] y [3,4] da L.L=[1,2,3,4]
(INAOE) 2012 168 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Estructuras Parciales
• Algo “comun” en Prolog es trabajar con estructurasparcialmente definidas.
• Un ejemplo donde se ve esto, es en la definicion deappendappend([],L,L).append([H|T],L,[H|R]) :-
append(T,L,R).• El problema de esta definicion es que es muy
ineficiente, sobre todo si la primera lista es grande (yaque tiene que recorrerla toda antes de acabar).
• Si supieramos donde acaba la lista esto se podrıasolucionar.
(INAOE) 2012 169 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
EStructuras Parciales• Lo podemos solucionar si representamos a una lista
como un par: la lista en sı, y el resto.• Es comun ponerlo como diferencia de listas: L1 – L2
(pero puede usarse otra notacion, e.g., L1/L2)[1,2,3] = [1,2,3] - []
= [1,2,3,4,5] - [4,5]= [1,2,3|T] - T
L1 = A1-Z1, L2 = A2-Z2, append(L1,L2,L3):
append(A1-Z1, Z1-Z2, A1-Z2).
?- append([1,2,3|T]-T,[4,5,6|R]-R,L3).T = [4,5,6|R]L3 = [1,2,3,4,5,6|R]-R
? - append([a,b,c,d|T1]-T1,[e,f,g|T2]-T2,Z-[]).T1 = [e,f,g],T2 = [],Z = [a,b,c,d,e,f,g]
?- append([1,2,3|T]-T,[a,b,c]-[],R-[]).T = [a,b,c],R = [1,2,3,a,b,c]
(INAOE) 2012 170 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Estructuras Parciales
• Si queremos anadir un elemento al final de una lista:anade(Elem,Lista-[Elem|T],Lista-T).
?- anade(a,[1,2,3|R]-R,X).R = [a|T],X = [1,2,3,a|T]-T
(INAOE) 2012 171 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Estructuras Parciales
• n general en todas las definiciones en donde usabamosappend podemos cambiarlas para usar diferencia delistas (o estructuras incompletas).
• Por ejemplo para voltear una lista:
voltea(L,LV) :- voltea2(L-[],LV-[]).
voltea2(A-Z,L-L) :- A == Z, !.voltea2([H|T]-Z,RL-RZ) :-
voltea2(T-Z,RL-[H|RZ]).
(INAOE) 2012 172 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Mas ejemplos
• Para quicksort:
qsort2([],Z-Z).qsort2([H|T],A1-Z2) :-
divide(H,T,Men,May),qsort2(Men,A1-[H|Z1]),qsort2(May,Z1-Z2).
(INAOE) 2012 173 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Aumentar Listas Dinamicamente• Una aplicacion comun, es ir aumentando una estructira
parcial al tener nueva informacion.• Por ejemplo: vamos a suponer que tenemos un
diccionario que tiene una secuencia de pares(Llave,Valor )Dict = [(juan,1432), (pepe,75), (maria, 3214)|R]
?- busca(pepe,Dict,N).N = 75
?- busca(juan,Dict,1432).yes
?- busca(pancrasio,Dict,2816).Dict = [(juan,1432), (pepe,75), (maria, 3214), (pancrasio,2816)|R]
(INAOE) 2012 174 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Aumentar Listas Dinamicamente
busca(Llave,[(Llave,Valor)|Dict],Valor).busca(Llave,[(Llave1, )|Dict],Valor) :-
Llave = Llave1,busca(Llave,Dict,Valor).
(INAOE) 2012 175 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Estructuras Parciales
• Las estructuras de datos incompletas tambien puedenusarse en otras estructuras que no sean listas.
• En particular, el ejemplo de arriba se puede mejorar sien lugar de listas utilizamos un arbol binario.
• La idea es tener del lado izquierdo del arbol elementosmenores y del derecho elementos mayores que el nodoraız.
(INAOE) 2012 176 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Estructuras Parciales
• Antes veamos como podemos representar un arbolbinario:
arbol binario(vacio).arbol binario(arbol(Nodo,Izq,Der)) :-
arbol binario(Izq),arbol binario(Der).
elemento arbol(N,arbol(N, , )).elemento arbol(N,arbol( ,Izq, )) :-
elemento arbol(N,Izq).elemento arbol(N,arbol( , ,Der)) :-
elemento arbol(N,Der).
(INAOE) 2012 177 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Diccionario (cont.)
• Regresando al diccionario, el arbol lo podemosrepresentar como sigue:dict(Llave,Valor,Izq,Der ).
• Asumimos que ahora las llaves son numeros y losvalores pueden ser lo que sea.
• En caso de que las llaves no sean numeros se puedeuser @<, @>
(INAOE) 2012 178 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Diccionario (cont.)
busca(Llave,dict(Llave,X,Izq,Der),Valor) :-!, X = Valor.
busca(Llave,dict(Llave1,X,Izq,Der), Valor) :-Llave < Llave1,busca(Llave,Izq,Valor).
busca(Llave,dict(Llave1,X,Izq,Der), Valor) :-Llave > Llave1,busca(Llave,Der,Valor).
?- busca(2,L,b), busca(1,L,a), busca(3,L,c), busca(3,L,X).L = dict(2,b,dict(1,a, , ),dict(3,c, , )).X = c
En el programa de arriba necesitamos el CUT por si Llaveno esta instanciada (ya que si llega a < o > marcarıa unerror)
(INAOE) 2012 179 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Estructuras Parciales
Mas de I/O
read(X). write(X).tab(N). nl.get0(C). get(C). put(C).
?- consult(Archivo).:- [Archivo]
?- reconsult(Archivo).:- [-Archivo].
(INAOE) 2012 180 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
Definite Clause Grammar (DCG)
• Algo facil de hacer en Prolog es escribir “parsers”.• De hecho Prolog fue usado inicialmente para
procesamiento de lenguaje natural.• Prolog tiene la facilidad de traducir directamente sus
clausulas de Horn en DCGs.
(INAOE) 2012 181 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs
DCG son una extension de CFG:• Un sımbolo no terminal o terminal puede ser cualquier
predicado de Prolog• Se pueden incluir condiciones extras del lado derecho• Permite tener “;” y “!”
(INAOE) 2012 182 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs
Ejemplo de CFG (solo 1 sımbolo del lado izq.)
oracion −− > sujeto, predicado.sujeto −− > articulo, sustantivo.predicado −− > verbo, sujeto.predicado −− > verbo.articulo −− > [el].articulo −− > [la].sustantivo −− > [manzana].sustantivo −− > [hombre].verbo −− > [come]
(INAOE) 2012 183 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs
• La primera regla dice que una oracion esta compuestapor un sujeto seguida de un predicado.
• En Prolog podrıamos “parsear” una oracion, donde lossımbolos terminales simplemente tienen lo que aceptany los demas sımbolos son listas con frases queaceptan.
• Una forma simple (pero ineficiente) de hacerlo es:
(INAOE) 2012 184 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs (cont.)
oracion(Lista) :-sujeto(Suj),predicado(Pred),append(Suj,Pred,Lista).
sujeto(Suj) :-articulo(Art),sustantivo(Sust),append(Art,Sust,Suj).
articulo([el]).articulo([la]).
(INAOE) 2012 185 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs (cont.)
• sto se puede mejorar, eliminando el “append” si cadaparte de la oracion nos dice cuanto ocupa:
?- oracion([el,hombre,come,la,manzana],[]).
oracion(L1,L3)) :- sujeto(L1,L2), predicado(L2,L3).sujeto(L1,L3) :- articulo(L1,L2), sustantivo(L2,L3).predicado(L1,L3) :- verbo(L1,L2), sujeto(L2,L3).predicado(L1,L2) :- verbo(L1,L2).articulo([el|T],T).articulo([la|T],T).sustantivo([hombre|T],T).sustantivo([manzana|T],T).verbo([come|T],T).
(INAOE) 2012 186 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs (cont.)
• Hay que notar que lo mismo se puede representar (casiigual) como diferencia de listas, i.e., oracion(L1-L3) :- ...
• Prolog tiene una forma de traducir la representacion dearriba en notacion de CFG + le da facilidad de incluirargumentos y llamar a predicados de Prolog.
• Esto es, nosotros especificamos como un CFG y setraduce al codigo de arriba.
• Para hacer preguntas hay que recordar que se hizo latraduccion, i.e.:?- oracion([el,hombre,come,la,manzana],[]).
(INAOE) 2012 187 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
Phrase
• Algunos Prolog (no todos) tienen “phrase”:
?- phrase(oracion,[el,hombre,come,la,manzana]).?- phrase(sujeto,[la,manzana]).
• En la notacion, se permiten incluir llamados entrecorchetes.
• Tambien podemos anadir mas argumentos.
(INAOE) 2012 188 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
TITULO• Por ejemplo, si queremos guardar el arbol que genera
el “parser”, podemos poner:
oracion(oracion(S,P)) −− > sujeto(S) predicado(P).sujeto(suj(A,S)) −− > articulo(A), sustantivo(S).predicado(pred(V,S)) −− > verbo(V), sujeto(S).predicado(pred(V)) −− > verbo(V).articulo(art(el)) −− > [el]....
?- oracion(Arbol,[el,hombre,come,la,manzana],[]).Arbol = oracion(suj(art(el),
sust(hombre)),pred(verb(come),
suj(art(la),sust(manzana)))).
(INAOE) 2012 189 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs (cont.)
• Algo comun es revisar por genero y numero:oracion −− > sujeto(Num), predicado(Num).sujeto(N) −− > articulo(Num,Gen), sustantivo(Num,Gen).predicado(Num) −− > verbo(Num), sujeto( ).articulo(sing,fem) −− > [la].articulo(sing,masc) −− > [el].articulo(plural,fem) −− > [las].articulo(plural,masc) −− > [los].verbo(sing) −− > [come].verbo(plural) −− > [comen].sustantivo(sing,masc) −− > [hombre].sustantivo(sing,fem) −− > [manzana].
(INAOE) 2012 190 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs (cont.)
• Para “parsear” una expresion matematica y regresar suresultado:
expr(Z) −− > term(X), “+”, expr(Y), Z is X + Y.expr(Z) −− > term(X), “-”, expr(Y), Z is X - Y.expr(Z) −− > term(X).
term(Z) −− > numero(X), “*”, term(Y), Z is X * Y.term(Z) −− > numero(X), “/”, term(Y), Z is X / Y.term(Z) −− > numero(Z).
numero(N) −− > “+”, numero(N).numero(N) −− > “-”, numero(M), N is - M.numero(N) −− > [X], 48 =< X, X =< 57, N is X - 48.
(INAOE) 2012 191 / 192
Introduccon
Antecedentes
Nociones deLogica
Relacion conLogica
Sintaxis
Listas
Aritmetica
AlgunosEjemplos
Control
Selectores yAcceso aPredicados yProgramas
Todas lassoluciones
Operadores
EstructurasParciales
DefiniteClauseGrammar(DCG)
Definite Clause Grammar (DCG)
DCGs (cont.)• Alternativamente, se puede poner la expresion en un
lista, todos los que estan entre doble comillas, cambiana elementos en listas, e.g., “+” => [+], y la ultima denumero cambia:numero(N) −− > [N], member(N,[0,1,2,3,4,5,6,7,8,9]).Con DCG podemos hacer mas que con CFG (e.g.,anbncn)s −− > [a], s(i).s(I) −− > [a], s(i(I)).s(I) −− > nb(I), nc(I).
nb(i(I)) −− > [b], nb(I).nb(i) −− > [b].
nc(i(I)) −− > [c], nc(I).nc(i) −− > [c].
(INAOE) 2012 192 / 192
top related