Tema IV Programación lógica con estructuras



Documentos relacionados
Curso PHP Módulo 1 R-Luis

Módulo 9 Sistema matemático y operaciones binarias

1. El vocabulario de un programa PROLOG

Objetivos. Contenidos. Revisar los principales conceptos de la lógica de primer orden

Programación con listas

1. Sintaxis de Prolog

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Estructuras Algebraicas Una estructura algebraica es un objeto matemático consistente en un conjunto no vacío, con por lo menos una operación binaria.

Tipos Abstractos de Datos

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso v1.0 (05.03.

Estructuras de datos: Proyecto 2

Capítulo 6. ÁRBOLES.

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

Tema 2 : Códigos Binarios

INSTITUTO SUPERIOR TECNOLÓGICO NORBERT WIENER

Ampliación de Estructuras de Datos

ANÁLISIS DESCRIPTIVO CON SPSS

Estructuras de datos: Árboles binarios de

Capítulo 12: Indexación y asociación

Proyecto Unico Interpretador de SetCalc

Estructuras de Datos y Algoritmos. Árboles de Expresión

5.1 Listas. Por qué usar listas?

Sistemas de Numeración

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Tema 3 Elementos básicos de programación

Técnicas de prueba 1. FUNDAMENTOS DE LA PRUEBA DEL SOFTWARE

Tema 2 : NÚMEROS ENTEROS. Primero de Educación Secundaria Obligatoria. I.e.s Fuentesaúco.

Álgebras de Boole. Juan Medina Molina. 25 de noviembre de 2003

Estructuras algebraicas

Funciones. Funciones Diapositiva 1

En la actualidad ASCII es un código de 8 bits, también conocido como ASCII extendido, que aumenta su capacidad con 128 caracteres adicionales

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO

Conjuntos, Relaciones y Grupos. Problemas de examen.

Conceptos básicos: 1,2 puntos

Sistemas de numeración, operaciones y códigos.

Tablas. Estas serán las tablas que usaremos en la mayoría de ejemplos. Empleado

Significado de las f.b.f (fórmulas bien formadas) en términos de objetos, propiedades y relaciones en el mundo

ESTRUCTURA DE DATOS: ARREGLOS

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 9. Reglas de Integridad

ESTRUCTURAS ALGEBRAICAS. Parte 1

1. SISTEMAS DIGITALES

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014

UNIDAD I: LÓGICA PROPOSICIONAL

EJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO

Tema 2: La clase string

I. ALGEBRA DE BOOLE. c) Cada operación es distributiva con respecto a la otra: a. ( b + c) = a. b + a. c a + ( b. c ) = ( a + b ).

Definición Dados dos números naturales m y n, una matriz de orden o dimensión m n es una tabla numérica rectangular con m filas y n columnas.

Tema 10- Representación Jerárquica: Tema 10- Representación Jerárquica: Árboles Binarios

Representación de la Información

Índice Introducción Números Polinomios Funciones y su Representación. Curso 0: Matemáticas y sus Aplicaciones Tema 1. Números, Polinomios y Funciones

árbol como un conjunto de nodos y líneas

CONJUNTOS Y RELACIONES BINARIAS

Semántica Denotacional

Tema 2. La Información y su representación

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Teoría Tema 5 Espacios vectoriales


TALLER #5 ACCESS CONSULTAS. objeto Consulta en la vista lateral izquierda de la ventana Base de datos. Aparece esta ventana.

TAD Lineales: Pila, Cola y Lista

Capítulo 1: Sistemas de representación numérica Introducción. Dpto. de ATC, Universidad de Sevilla - Página 1 de 8

21/02/2012. Agenda. Unidad Central de Procesamiento (CPU)

Árbol binario. Elaborado por Ricardo Cárdenas cruz Jeremías Martínez Guadarrama Que es un árbol Introducción

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Relaciones binarias. ( a, b) = ( c, d) si y solamente si a = c y b = d

promedio = nint((notas(1) + notas(2) + notas(3) + & notas(4) + notas(5) + notas(6)) / 6.0) print *, 'Su promedio es', promedio

GEOMETRÍA ANALÍTICA 2º Curso de Bachillerato 22 de mayo de 2008

ESTADÍSTICA APLICADA A LA INVESTIGACIÓN EN SALUD Construcción de una Base de Datos

Apuntes de Matemática Discreta 9. Funciones

circuitos digitales Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso

3.1. Concepto de función. Dominio, recorrido y gráfica Concepto de función

Centro de Capacitación en Informática

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES

TEMA II REPASO. SISTEMAS DE NUMERACIÓN USUALES EN INFORMÁTICA.

TEMA 1: SISTEMAS INFORMÁTICOS. Parte 2: representación de la información

4. Modelo Relacional: Manipulación de los datos.

Introducción a la plataforma Moodle Aníbal de la Torre Plataforma Moodle. Accediendo a los contenidos

Tema 3. El modelo Relacional

Estructuras de Datos. Montículos. Montículos. Montículos. Tema 3. Montículos. Definiciones básicas: Definiciones básicas:

Operaciones y Expresiones METATRADER, CONCEPTOS BÁSICOS DE PROGRAMACIÓN III

TEMA 3 POLINOMIOS NOMBRE Y APELLIDOS... HOJA 1 - FECHA...

Herramientas computacionales para la matemática MATLAB: Otros tipos de datos

Inecuaciones y Sistemas de Inecuaciones Lineales con una Incóg

ESTRUCTURAS ALGEBRAICAS 1

Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007

Tema 3 : Algebra de Boole

Juan Antonio González Mota Profesor de Matemáticas del Colegio Juan XIII Zaidín de Granada

NÚMEROS NATURALES Y NÚMEROS ENTEROS

Tema 2. El lenguaje de programación Java (Parte 1)

Capítulo 4 PROLOG 4.1 Introducción

PARTE 3 ECUACIONES DE EQUIVALENCIA FINANCIERA T E M A S

Restricciones sobre dominios finitos con Gprolog

Sistema de Gestión Académica. Mantenimiento de Usuarios. Revisión 1.0. Servicio de Informática Área de Gestión

TEMA 1 Representación de la información

Halla dominio e imagen de las funciones

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Transcripción:

Tema IV Programación lógica con estructuras Programación Lógica - E.T.S.I. Informática - Málaga 1

Términos La estructura de datos básica en PROLOG es el término. Los términos se clasifican en : variables no variables -> compuestos atómicos -> átomos números Las variables se denotan mediante palabras que comienzan por una letra mayúscula o por un guión de subrayado. los átomos se denotan mediante palabras que comienzan por una letra minúscula. Los números tienen la notación decimal habitual. Los términos compuestos tiene la forma general: <funtor>(<argumentos>), donde los argumentos también son términos separados por, y el funtor es un átomo. Programación Lógica - E.T.S.I. Informática - Málaga 2

Predicados para la comprobación de tipos Predicados predefinidos: var(t) - Tiene éxito cuando T es una variable sin instanciar. nonvar(t) Tiene éxito cuando T no es una variable sin instanciar. compound(t) Tiene éxito cuando T es un término compuesto. atomic(t) Tiene éxito cuando T es un término atómico. atom(t) Tiene éxito cuando T es un átomo. number(t) - Tiene éxito cuando T es un número. integer(t) Tiene éxito cuando T es un número entero. float(t) - Tiene éxito cuando T es un número decimal. Programación Lógica - E.T.S.I. Informática - Málaga 3

Términos compuestos Los términos compuestos se pueden ver como árboles generales: f f(x,h(a,b,3)) -> X h a b 3 Los términos compuestos pueden ser recursivos: cuando algún argumento es un término del mismo tipo. Los téminos compuestos más simple son los registros, cuyos argumentos no son del mismo tipo. Programación Lógica - E.T.S.I. Informática - Málaga 4

Comparación de términos PROLOG dispone de una relación de orden total @=< para la comparación de términos, consistente con el orden numérico y con el orden alfabético para los nombres de átomos (permite la aparición de variables libres) Xs == Ys éxito cuando Xs e Ys representan el mismo término Xs \== Ys Xs @< Ys Xs @> Ys Xs @=< Ys Xs @>= Ys éxito cuando Xs e Ys representan términos distintos éxito cuando Xs representa un término menor que Ys éxito cuando Xs representa un término mayor que Ys éxito cuando Xs representa un término menor o ig. que Ys éxito cuando Xs representa un término mayor o ig. que Ys (Tienen sentido para términos de la misma categoría) (No confundir con las relaciones numéricas) Programación Lógica - E.T.S.I. Informática - Málaga 5

Registros: fecha(dia,mes,año) % constructor cons_fecha(d,m,a,fecha(d,m,a)). % predicados de consulta dia(fecha(d,_,_),d).... % predicados para la modificación %completar poner_dia(d,fecha(_,m,a),fecha(d,m,a)).... %completar Ejercicios: 1. Predicado para comprobar el dominio fecha: es_fecha(fecha(d,m,a)) 2. Predicado para calcular la fecha siguiente a una dada: dia_sig(fecha(d,m,a),f) Programación Lógica - E.T.S.I. Informática - Málaga 6

Las listas en PROLOG Programación Lógica - E.T.S.I. Informática - Málaga 7

Listas:. (Cabeza, Cola) Las listas son términos compuestos recursivos que están predefinidos en PROLOG en la forma:. (Cabeza, Cola), donde Cabeza es un término y Cola otra lista. Hay una lista especial que no es un término compuesto: la lista vacía []. PROLOG incorpora notaciones más simples para listas: [Cabeza Cola] [] [T1,T2,...,Tn] [] Mixtas: [T1,T2,...,Tp Cola] Programación Lógica - E.T.S.I. Informática - Málaga 8

Ejercicios de comprobación de listas Comprobar cuales de las siguientes expresiones son listas y determinar el número de elementos en cada caso: [oros,copas,espadas,bastos] [oros copas,espadas,bastos] [oros [copas,espadas,bastos]] [oros,copas espadas,bastos] [oros,copas [espadas bastos]] [oros,copas,espadas [bastos]] [oros,copas,[espadas,bastos]] [oros,copas,espadas,bastos []] [oros [copas [espadas [bastos []]]]] Programación Lógica - E.T.S.I. Informática - Málaga 9

Ejercicios de unificación de listas [X Y] [a,[b,c]] [[a,b],c] [a X] [a X] [a X] [a,b,y] [a,b,y] [a,b Y] [a,b [Y]] [a,b [Y]] [a,b Y] [a,b,c] [X Y] [X Y] [Y a] [Y [c]] [Y] [X,T] [X T] [X,T] [a,b,c] [a,b,c,d] [a,b,c,d] Programación Lógica - E.T.S.I. Informática - Málaga 10

Árboles de búsqueda con listas Desarrollar el árbol de búsqueda correspondiente al programa siguiente: p([],[]). p([x Xs],[Y Ys]):-q(X,Y),p(Xs,Ys). q(a,b). q(a,y):-s(x),s(y). q(a,c). q(b,b). s(a). s(b). :-p([a,x],[x,b]). Programación Lógica - E.T.S.I. Informática - Málaga 11

Predicados sobre listas (I) Definir y estudiar los posibles usos de los siguientes predicados: % dominio de listas: es_lista/1 es_lista([]). es_lista([_ _]). % prefijo(prefijo,lista) % sufijo(sufijo,lista) % sublista(sublista,lista) % miembro(termino,lista) % seleccion(termino,lista,listaresto) Programación Lógica - E.T.S.I. Informática - Málaga 12

Prefijo % La lista vacía es prefijo de cualquier lista: prefijo([],l):- es_lista(l). % Una lista no vacía es prefijo de otra lista: prefijo([x Xs], [ X Ls ] ):- prefijo(xs,ls). no vacía con el mismo primer elemento si su cola es prefijo de la cola de la otra lista Programación Lógica - E.T.S.I. Informática - Málaga 13

Predicados sobre listas (II) Predicado para encadenar dos listas: encadena(as,bs,asbs) Definición atendiendo a la estructura del primer argumento: % La lista vacía encadenada con otra lista produce la otra: encadena([],bs,bs). % Una lista no vacía encadenada con otra lista produce una lista: encadena([a As],Bs, [ A AsBs ]) :- encadena(as,bs,asbs). no vacía con el mismo primer elemento cuya cola es la concatenación de su cola con la otra lista Programación Lógica - E.T.S.I. Informática - Málaga 14

Tabla de comportamiento de encadena/3 encadena(as,bs,asbs) (+,+,+) (+,+,-) (-,+,+) (+,-,+) (-,-,+) (-,-,-) test Generador único Generador único Generador único Generador acotado Generador infinito (anómalo) Comprueba si AsBs es la concatenación de As y Bs Genera AsBs a partir de As y de Bs Genera el prefijo As que encadenado con Bs da AsBs Genera el sufijo Bs que encadenado tras As da AsBs Genera todas las posibles particiones de AsBs en As y Bs Genera listas de variables libres para As, Bs queda libre y para AsBs la concatenación de ambas. Programación Lógica - E.T.S.I. Informática - Málaga 15

Predicados sobre listas (III) Redefinir los predicados siguientes utilizando encadena/3 y construir sus tablas de comportamiento teniendo en cuenta el comportamiento de encadena: % prefijo(as,asbs) % sufijo(bs,asbs) % sublista(bs,asbscs) % miembro(x,asxbs) % seleccion(x,asxbs,asbs) Definir: % ultimo(x,asx) % adyacentes(x,y,asxybs) % inversa(l,linvertida) % permutacion(l,lpermutada) % aplanada(l,lplana) Programación Lógica - E.T.S.I. Informática - Málaga 16

Predicados aritméticos sobre listas Definir predicados para calcular: La longitud de una lista. La suma de todos los elementos de una lista de números. El máximo elemento de una lista de números. La lista con todos los elementos del intervalo definido por dos números dados. Dar definiciones iterativas para cada uno de los predicados anteriores Programación Lógica - E.T.S.I. Informática - Málaga 17

Comparación de términos PROLOG dispone de una relación de orden total @=< para la comparación de términos, consistente con el orden numérico y con el orden alfabético para los nombres de átomos (permite la aparición de variables libres) Xs == Ys éxito cuando Xs e Ys representan el mismo término Xs \== Ys Xs @< Ys Xs @> Ys Xs @=< Ys Xs @>= Ys éxito cuando Xs e Ys representan términos distintos éxito cuando Xs representa un término menor que Ys éxito cuando Xs representa un término mayor que Ys éxito cuando Xs representa un término menor o ig. que Ys éxito cuando Xs representa un término mayor o ig. que Ys (Tienen sentido para términos de la misma categoría) (No confundir con las relaciones numéricas) Programación Lógica - E.T.S.I. Informática - Málaga 18

Comparación de términos sobre listas Definir predicados para 1) Determinar si un elemento, posiblemente una variable libre, pertenece a una lista. 2) Borrar un elemento de una lista. 3) Calcular el mínimo de una lista (de números o de nombres de átomos). 4) Comprobar si todos los elementos de una lista son iguales. 5) Sustituir todas las apariciones de un elemento, por otro, en una lista dada. Programación Lógica - E.T.S.I. Informática - Málaga 19

Listas ordenadas ordenada([]). ordenada([_]). ordenada([x,y Ls]):- X @=< Y, ordenada([y Ls]). ordenacion(l,lord):- permutacion(l,lord), ordenada(lord). Definir predicados para: 1) Insertar un elemento en una lista ordenada. 2) Ordenar los elementos de una lista por inserciones. 3) Separar los elementos de una lista con ayuda de un pivote. 4) Ordenar una lista por el procedimiento del pivote. Programación Lógica - E.T.S.I. Informática - Málaga 20

Cadenas de caracteres Las cadenas de caracteres son listas de caracteres. Prolog permite la representación habitual de cadenas entre comillas dobles, dentro de un programa o en una entrada, p.e. Hola!. Prolog almacena las cadenas como listas de códigos ASCII correspondientes a los caracteres Hola! [161, 72, 111, 108, 97, 33] Para mantener la representación textual puede ser conveniente utilizar átomos o texto entre comillas simples que no se puede descomponer en caracteres. :-write( Hola! ). :-write( Hola! ). produce la salida: [161,72,111,108,97,33] produce la salida: Hola! Programación Lógica - E.T.S.I. Informática - Málaga 21

Conjuntos representados con listas Los conjuntos se pueden representar en PROLOG mediante listas ordenadas y definir las distintas operaciones en función de dicha representación: % pertenece(elemento,conjunto) pertenece(x,[x _]). pertenece(x,[y Cs]):- X @> Y, pertenece(x,cs). % subconjunto(subcj,conjunto) % union(c1,c2,c1oc2) % interseccion(c1,c2,c1yc2) % diferencia(c1,c2,c1\c2) Programación Lógica - E.T.S.I. Informática - Málaga 22

Árboles en PROLOG Programación Lógica - E.T.S.I. Informática - Málaga 23

Árboles binarios En PROLOG pueden representarse los distintos tipos de árboles binarios mediante estructuras recursivas: ArbolB = vacio arbol(arbolb, Termino, ArbolB) ArbolH = hoja(termino) arbol(arbolh, ArbolH) Definir predicados para: 1) Reconocer estos dominios. 2) Determinar si dos árboles son simétricos y si son isomorfos. 3) Producir los distintos recorridos en profundidad de un ArbolB. 4) Producir el listado de hojas de un ArbolH. 5) Sustituir un elemento en un árbol. Programación Lógica - E.T.S.I. Informática - Málaga 24

Árboles binarios de búsqueda (I) Los árboles binarios de búsqueda se corresponden con los árboles del tipo ArbolB, cuyo listado en inorden está ordenado: ordenado(a):- inorden(a,lin), ordenada(lin). Predicado para buscar un elemento (no genera): esta(x,arbolb(_,y,_)):- X==Y. esta(x,arbolb(i,r,_)):- X @< R,esta(X,I). esta(x,arbolb(_,r,d)):- X @> R,esta(X,D). Definir un predicado para insertar un elemento. Programación Lógica - E.T.S.I. Informática - Málaga 25

Árboles binarios de búsqueda (II) Elemento máximo de un árbol ordenado: maxarb(arbolb(_,r,vacio),r). maxarb(arbolb(_,r,d),m):- maxarb(d,m). Predicado para borrar un elemento: borra(x,vacio,vacio). borra(x,arbolb(vacio,r,d),d):- X == R. borra(x,arbolb(i,r,d),arbolb(i,m,d)):- X == R, maxarb(i,m),borra(m,i,i ). borra(x,arbolb(i,r,d),arbolb(i,r,d)):- X @< R, borra(x,i,i ). borra(x,arbolb(i,r,d),arbolb(i,r,d )):- X @> R, borra(x,d,d ). Programación Lógica - E.T.S.I. Informática - Málaga 26

Árboles de expresiones booleanas Booleano = cierto falso and(booleano,booleano) or(booleano,booleano) not(booleano) 1) Definir un predicado que reconozca este dominio. 2) Definir predicados que reconozcan las expresiones satisfactibles y las no satisfactibles. Programación Lógica - E.T.S.I. Informática - Málaga 27

Árboles de expresiones aritméticas Predicado para reconocer expresiones aritméticas simples: expa(n):- number(n). expa(x):- var(x). expa(e1 + E2):- expa(e1), expa(e2). expa(e1 - E2):- expa(e1), expa(e2). expa(e1 * E2):- expa(e1), expa(e2). expa(e1 / E2):- expa(e1), expa(e2). Definir un predicado para evaluar expresiones aritméticas con parámetros, dada una lista de valores para los parámetros. Programación Lógica - E.T.S.I. Informática - Málaga 28

Árboles generales (I) Los árboles generales se pueden representar en PROLOG mediante la siguiente estructura recursiva: ArbolG = vacio arbol(termino, [ArbolG]) Predicado para reconocer el dominio de los árboles generales arbolg(vacio). arbolg(arbol(_,[])). arbolg(arbol(r,[a As])):- arbolg(a), arbolg(arbol(r,as)). Programación Lógica - E.T.S.I. Informática - Málaga 29

Árboles generales (II) Definir predicados sobre árboles generales para: 1. Calcular el recorrido en preorden. 2. Determinar si un elemento es miembro de un árbol. 3. Determinar si dos árboles son isomorfos. 4. Sustituir las apariciones de un elemento por otro. Programación Lógica - E.T.S.I. Informática - Málaga 30