Programación declarativa ( )

Documentos relacionados
Programación declarativa ( )

Programación lógica Curso Tema 2: Prolog. José A. Alonso Jiménez.

Tema 6: Representación lógica del conocimiento

Tema 2: Listas, aritmética y operadores

Tema 15: Programación lógica con Prolog

Programación declarativa ( )

Introducción a la programación lógica con Prolog

Tema 1: El sistema deductivo de Prolog

Tema 1: Revisión de Prolog

Deducción automática

Tema 3: Introducción a Prolog

Aritmética y operadores (2011/2012)

Tema 5: Otros predicados predefinidos

Programación Declarativa: Lógica y restricciones

Tema 4: Programación lógica y Prolog

Tema 6: Programación lógica de segundo orden

Tema 4: Resolución de problemas de espacios de estados

Información estructurada. Listas (2010/2011)

ANX-PR/CL/ GUÍA DE APRENDIZAJE

ANX-PR/CL/ GUÍA DE APRENDIZAJE. ASIGNATURA Programacion declarativa: logica y restricciones

UNIVERSIDAD POLITÉCNICA DE MADRID. E.T.S. de Ingenieros Informaticos PROCESO DE SEGUIMIENTO DE TÍTULOS OFICIALES

Programación Declarativa Curso Tema 3: Estructuras. José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo

ANX-PR/CL/ GUÍA DE APRENDIZAJE

Programación lógica ( )

Programación Declarativa Curso

Introducción a la Programación Lógica. Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Proyecto: Programación Declarativa: Lenguaje Prolog

Tema 2: Información estructurada. Listas

Tema 4: Definición de funciones

Metodología de Programación I Presentación del curso.

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

Tema 6: Funciones recursivas

Tema 2: Introducción a la programación con Haskell

Tema 2: Introducción a la programación con Haskell

Tema 8: Razonamiento automático y programación

Tema 7: Razonamiento sobre programas

Tema 4: Definición de funciones

Programación declarativa ( )

Tema 1: Introducción a la programación funcional

GUÍA DE APRENDIZAJE PROGRAMACIÓN DECLARATIVA GRADUADO EN INGENIERÍA DE SOFTWARE

Otter: Predicados evaluables

5.3 Tipos de Datos en Prolog

Tema 2: Introducción a la programación con Haskell

Tema 2: Introducción a la programación con Haskell

Programación declarativa ( )

Aplicaciones de RA con OTTER

PROTOCOLO. Fechas Mes/año Clave Semestre 8 a 10

GUÍA DOCENTE DE LA ASIGNATURA

PROGRAMACIÓN DECLARATIVA

Tema 1: Introducción a la programación funcional

Lógica y Programación

Tema 10: Evaluación perezosa

Tema 3: Tipos y clases

Tema 4: Redes semánticas y marcos

Tema 3: Tipos y clases

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior

Tema 7: Aplicaciones de PD: problemas de grafos y el problema de las reinas

Listas. Listas. Listas. Listas y Corte en Prolog. Temas Avanzados en Ingeniería Informática I (Lógica) David Camacho Fernández.

Programmacion Declarativa - Prolog:

INSTITUTO POLITÉCNICO NACIONAL SECRETARÍA ACADÉMICA DIRECCIÓN DE EDUCACION SUPERIOR PROGRAMA SINTÉTICO

Introducción a PROLOG

Tema DA-6: Aplicaciones de razonamiento automático

Entorno y herraminetas

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema 11: Analizadores sintácticos funcionales

Listas en Prolog. Capítulo. Listas como sujetos

Cuestiones administrativas Sistemas Inteligentes de Gestión Segundo cuatrimestre, curso 2011/2012 Horario de clases Teoría Miércoles, de 17:00 a 19:00

Tema 8: Procesamiento de lenguaje natural

Lógica y Programación

PROGRAMACIÓN ORIENTADA A OBJETOS

Tema 12: Analizadores sintácticos funcionales

Tema 5: Procesamiento de lenguaje natural

Tema 3: Demostraciones proposicionales

Tema 4: Tableros semánticos

Inteligencia Artificial II: Conocimiento, Razonamiento y Planeación. Presentación del Curso.

LICENCIATURA EN SISTEMAS DE INFORMACIÓN. PLANIFICACIÓN (Plan 2011)

Tema 2: Deducción natural proposicional

Tema 5: Definiciones de listas por comprensión

Tema 5: Definiciones de listas por comprensión

Soluciones del examen de Lógica informática (Grupos 1 y 2) del 23 de Septiembre de José A. Alonso Jiménez

DES: Programa(s) Educativo(s): Tipo de materia: Clave de la materia:

Inteligencia Artificial: Prolog

Programación lógica ( )

Inteligencia Artificial: Prolog

Tema 2: Representación de problemas como espacios de estados

INSTITUTO POLITECNICO NACIONAL SECRETARIA ACADEMICA DIRECCION DE ESTUDIOS PROFESIONALES EN INGENIERIA Y CIENCIAS FISICO MATEMATICAS

Temas de Programación lógica e I.A. José A. Alonso Jiménez

Tema 2: Equivalencias y formas normales

Tema 2. Fundamentos de la Teoría de Lenguajes Formales

Tema 13: Introducción a la Programación Lógica Inductiva

Práctica 2. TIPOS DE DATOS SIMPLES

Transcripción:

Programación declarativa (2004 05) Tema 2: Listas, operadores y aritmética José A. Alonso Jiménez Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla PD (2004 05) Tema 2 p. 1/18

Listas Definición de listas: La lista vacía [] es una lista. Si L es una lista, entonces.(a,l) es una lista. Ejemplos:?-.(a,.(b,[])) = [a,b] Yes?-.(X,Y) = [a]. Y = []?-.(X,Y) = [a,b]. Y = [b]?-.(x,.(y,z)) = [a,b]. Y = b Z = [] PD (2004 05) Tema 2 p. 2/18

Listas Escritura abreviada: [X Y] =.(X,Y) Ejemplos con escritura abreviada:?- [X Y] = [a,b]. Y = [b]?- [X Y] = [a,b,c,d]. Y = [b, c, d]?- [X,Y Z] = [a,b,c,d]. Y = b Z = [c, d] PD (2004 05) Tema 2 p. 3/18

Listas Concatenación de listas (append): Especificación: conc(a,b,c) se verifica si C es la lista obtenida escribiendo los elementos de la lista B a continuación de los elementos de la lista A; es decir, 1. Si A es la lista vacía, entonces la concatenación de A y B es B. 2. Si A es una lista cuyo primer elemento es X y cuyo resto es D, entonces la concatenación de A y B es una lista cuyo primer elemento es X y cuyo resto es la concatenación de D y B. Por ejemplo,?- conc([a,b],[b,d],c). C =[a,b,b,d] Definición 1: conc(a,b,c) :- A=[], C=B. conc(a,b,c) :- A=[X D], conc(d,b,e), C=[X E]. Definición 2: conc([],b,b). conc([x D],B,[X E]) :- conc(d,b,e). PD (2004 05) Tema 2 p. 4/18

Listas Concatenación de listas (append): Nota: Analogía entre la definición de conc y la de suma, Consulta: Cuál es el resultado de concatenar las listas [a,b] y [c,d,e]??- conc([a,b],[c,d,e],l). L = [a, b, c, d, e] Consulta: Qué lista hay que añadirle a la lista [a,b] para obtener [a,b,c,d]??- conc([a,b],l,[a,b,c,d]). L = [c, d] Consulta: Qué dos listas hay que concatenar para obtener [a,b]??- conc(l,m,[a,b]). L = [] M = [a, b] ; L = [a] M = [b] ; L = [a, b] M = [] ; No PD (2004 05) Tema 2 p. 5/18

Listas Árbol de deducción correspondiente a?- conc(l,m,[a,b]). : conc(l0,m0,[a,b]). R1 {L0/[], B1/[a,b], M0/[a,b]} :. R2 {L0/[a D1], B1/M0, E1/[b]} : conc(d1,m0,[b]). L=[] M=[a,b] R1 {D1/[], B2/[b], M0/[b]} :. L=[a] M=[b] R2 {D1/[b D2], B2/M0, E2/[]} : conc(d2,m0,[]). :. R1 {D2/[], B3/[], M0/[]} L=[a,b] M=[] PD (2004 05) Tema 2 p. 6/18

Listas La relación de pertenencia (member): Especificación: pertenece(x,l) se verifica si X es un elemento de la lista L. Definición 1: pertenece(x,[x L]). pertenece(x,[y L]) :- pertenece(x,l). Definición 2: pertenece(x,[x _]). pertenece(x,[_ L]) :- pertenece(x,l). PD (2004 05) Tema 2 p. 7/18

Listas La relación de pertenencia (member): Consultas:?- pertenece(b,[a,b,c]). Yes?- pertenece(d,[a,b,c]). No?- pertenece(x,[a,b,a]). ; X = b ; ; No?- pertenece(a,l). L = [a _G233] ; L = [_G232, a _G236] ; L = [_G232, _G235, a _G239] Yes PD (2004 05) Tema 2 p. 8/18

Listas Árbol de deducción de?- pertenece(a,l). : pertenece(a,l0). R1 {X1/a, L0/[a _]} :. R2 {X1/a, L0/[_ L1]} : pertenece(a,l1). L=[a _] R1 {X2/a, L1/[a _]} :. R2 {X2/a, L1/[_ L2]} : pertenece(a,l2). L=[_,a _] PD (2004 05) Tema 2 p. 9/18

Disyunciones Definición de pertenece con disyunción pertenece(x,[y L]) :- X=Y ; pertenece(x,l). Definición equivalente sin disyunción pertenece(x,[y L]) :- X=Y. pertenece(x,[y L]) :- pertenece(x,l). PD (2004 05) Tema 2 p. 10/18

Operadores Ejemplos de notación infija y prefija en expresiones aritméticas:?- +(X,Y) = a+b. Y = b?- +(X,Y) = a+b+c. +b Y = c?- +(X,Y) = a+(b+c). Y = b+c?- a+b+c = (a+b)+c. Yes?- a+b+c = a+(b+c). No PD (2004 05) Tema 2 p. 11/18

Operadores Operadores aritméticos predefinidos: Precedencia Tipo Operadores 500 yfx +,- Infijo asocia por la izquierda 500 fx - Prefijo no asocia 400 yfx *, / Infijo asocia por la izquierda 200 xfy ˆ Infijo asocia por la derecha Ejemplos de asociatividad:?- X^Y = a^b^c. Y = b^c?- a^b^c = (a^b)^c. No?- a^b^c = a^(b^c). Yes PD (2004 05) Tema 2 p. 12/18

Operadores Ejemplo de precedencia?- X+Y = a+b*c. Y = b*c?- X*Y = a+b*c. No?- X*Y = (a+b)*c. +b Y = c?- a+b*c = a+(b*c). Yes?- a+b*c = (a+b)*c. No PD (2004 05) Tema 2 p. 13/18

Operadores Definición de operadores: Definición (ejemplo_operadores.pl) :-op(800,xfx,estudian). :-op(400,xfx,y). juan y ana estudian lógica. Consultas?- [ejemplo_operadores]. Yes?- Quienes estudian lógica. Quienes = juan y ana?- juan y Otro estudian Algo. Otro = ana Algo = lógica PD (2004 05) Tema 2 p. 14/18

Aritmética Evaluación de expresiones aritmética con is.?- X is 2+3^3. X = 29?- X is 2+3, Y is 2*X. X = 5 Y = 10 Relaciones aritméticas: <, =<, >, >=, =:= y =/=?- 3 =< 5. Yes?- 3 > X. [WARNING: Arguments are not sufficiently instanti?- 2+5 = 10-3. No?- 2+5 =:= 10-3. Yes PD (2004 05) Tema 2 p. 15/18

Aritmética Definición de procedimientos aritméticos: factorial(x,y) se verifica si Y es el factorial de X. Por ejemplo,?- factorial(3,y). Y = 6 ; No Definición: factorial(1,1). factorial(x,y) :- X > 1, A is X - 1, factorial(a,b), Y is X * B. PD (2004 05) Tema 2 p. 16/18

Aritmética Árbol de deducción de?- factorial(3,y). : factorial(3,y0). R2 {X1/3, Y1/Y0} : 3 > 1, A1 is 3 1, factorial(a1,b1), Y0 is 3*B1. Aritmetica {A1/2} : factorial(2,b1), Y0 is 3*B1. R2 {X3/2, Y3/B1} : 2 > 1, A3 is 2 1, factorial(a3,b3), B1 is 2*B3, Y0 is 3*B1. Aritmetica {A3/1} : factorial(1,b3), B1 is 2*B3, Y0 is 3*B1. R1 {B3/1} : B1 is 2*1, Y0 is 3*B1. Aritmetica {B1/2, Y0/6} :. Y=6 R2 {Y5/1, Y5/B3} : 1 > 1, A5 is 1 1, factorial(a5,b5), B3 is 1*A5, B1 is 2*B3, Y0 is 3*B1. Fallo Aritmetica PD (2004 05) Tema 2 p. 17/18

Bibliografía Alonso, J.A. y Borrego, J. Deducción automática (Vol. 1: Construcción lógica de sistemas lógicos) (Ed. Kronos, 2002) Bratko, I. Prolog Programming for Artificial Intelligence (2nd ed.) (Addison Wesley, 1990) Clocksin, W.F. y Mellish, C.S. Programming in Prolog (Fourth Edition) (Springer Verlag, 1994) Covington, M.A.; Nute, D. y Vellino, A. Prolog Programming in Depth (Prentice Hall, 1997) Sterling, L. y Shapiro, E. L art de Prolog (Masson, 1990) Van Le, T. Techniques of Prolog Programming (John Wiley, 1993) PD (2004 05) Tema 2 p. 18/18