Estructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas

Documentos relacionados
Práctica I. Prolog I: Elementos básicos de Prolog

6. Operadores en PROLOG

Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas

Conceptos básicos sobre gramáticas

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

LENGUAJES Y GRAMÁTICAS

Generación de Código Intermedio

Introducción a los árboles. Lección 11

Tema IV Programación lógica con estructuras

ESTRUCTURAS ALGEBRAICAS. Parte 1

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3.

Tema 6: Estructuras de datos recursivas

Lenguajes de Programación Programación funcional

Inteligencia Artificial: Prolog

NOCIONES PRELIMINARES (*) 1

Programación con Listas

Tipos paramétricos y recursivos

Inteligencia Artificial: Prolog

Prolog: Listas (y II) MRC

Tema 5: Procesamiento de lenguaje natural

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

Algoritmos y programas. Algoritmos y Estructuras de Datos I

John Venn Matemático y filósofo británico creador de los diagramas de Venn

INDUCCIÓN. Inducción - 2

UNIDAD 2. ESTRUCTURAS DE DATOS SECUENCIALES. 1. Pilas (Stacks)

Tipos lineales I. Tipos Lineales 2

5.3 Tipos de Datos en Prolog

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Manejo de módulos y recursión en programación. Pseudocódigo. (CU00204A)

EDA. Tema 8 Colas de Prioridad: Heaps

3.4. INSERTAR Y DAR FORMATO A GRÁFICOS SMARTART.

Tema 1. Introducción al PROLOG. 1. Qué es el PROLOG? 2. Los elementos de PROLOG 3. Un programa de ejemplo 4. Ejercicios propuestos

Datos y tipos de datos

Tipos de datos en Haskell

Grafos. Amalia Duch Brown Octubre de 2007

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

18 Análisis sintáctico III Compiladores - Profr. Edgardo Adrián Franco Martínez. Clasificación de métodos de análisis sintáctico Análisis descendente

GRUPO DE TRABAJO COMBISOL LAS MÁQUINAS

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Datos y tipos de datos

Prolog. Sintaxis Informal. Sintaxis Informal. Hechos: ejemplos. Inteligencia Artificial 2º cuatrimestre de Hechos. Hechos. Reglas.

Definiciones: conjuntos, grafos, y árboles. Agustín J. González ELO 320: Estructura de Datos y Algoritmos. 2002

Máquinas Secuenciales, Autómatas y Lenguajes Tema 5: Propiedades de los Lenguajes Regulares. Luis Peña

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

Secuencias en Python. Introducción a la Computación Clase 11 Patricia Borensztejn

Lenguaje Regular. Sumario. Lenguaje Regular. Autómatas y Lenguajes Formales. Capítulo 8: Propiedades de los Lenguajes Regulares

CONTENIDO. 1.- Introducción a la Inteligencia Artificial (IA) 2.- Lógica de predicados. 3.- Búsqueda de soluciones

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

VARIABLES LOCALES Y VARIABLES GLOBALES

Estructura de datos y de la información Boletín de problemas - Tema 10

Inteligencia en Redes de Comunicaciones. Prolog. Julio Villena Román.

INSTITUTO TECNOLÓGICO DE NUEVO LAREDO ING. EN SISTEMAS COMPUTACIONALES UNIDAD: 2

Lenguajes (gramáticas y autómatas)

5. Entrada y Salida en PROLOG

Programación Funcional en LISP Lógica para Ciencias de la Computación

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 4: Expresiones Regulares. Luis Peña

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad

Coordinación de Ciencias Computacionales INAOE. Teoría de Autómatas y Lenguajes Formales. Temario detallado para examen de ingreso 2012

Gráficos Ms Excel. Los datos deben encontrarse en una o más áreas rectangulares, no tiene porque se contiguas.

Inteligencia Artificial

FUNCIONES EN EXCEL III

INDICACIONES PARA LA SOLUCIÓN A ALGUNOS PROBLEMAS DE LA RELACION 6. Se usarán los siguiente predicados genéricos en todos los ejemplos

TEMA 5 El tipo grafo. Tipo grafo

PROCESO DE LA GESTIÓN TIC

Maquina de Turing. 5. Fundamentos de algoritmos. Turing TURING TURING 10/08/2010. MI Elizabeth Fonseca Chávez

PASOS PARA LA VALIDACION DE DATOS

1. Cadenas EJERCICIO 1

1. Cómo introducir datos en SPSS/PC? - Recordatorio

Este programa estadístico está organizado en dos bloques: el editor de datos y el visor de resultados.

Aritmética y operadores (2011/2012)

Funciones: Aspectos básicos

Programación Exploratoria - Predicados Predefinidos en Prolog -

Autómatas Finitos y Lenguajes Regulares

Programación Declarativa Ejercicios de programación con listas

Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars)

ESTADÍSTICA CON EXCEL

OPTIMIZACIÓN DE CÓDIGO

Un algoritmo es una serie de pasos lógicos y organizados que describe el proceso que se debe seguir, para dar solución a un problema específico.

Conceptos previos. Revisión de Sistemas Lógicos Formatos Numéricos. Dpto. Ingeniería Electrónica y Comunicaciones

Para entender la diferencia entre una relación y una función primero analizaremos el concepto de cada uno.

CCNN 5º Primaria Tema 8: Las máquinas

Hojas de cálculo. Nociones básicas

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

ESTADÍSTICA DESCRIPTIVA

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Actividad de Evaluación Brandon Emmanuelle Cuevas Rangel GPO: 303 Carrera: Informática 3er Semestre Joel Rocha Barocio Cienega de Flores N.L.

Programación Orientada a Objetos. Introducción

Tema 10: Árbol binario de búsqueda

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Rancagua, Agosto 2009

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

10 Introducción a BISON/YACC

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Tema 7: Recursividad

ECUACIONES, ORGANIGRAMAS y GRÁFICOS

Transcripción:

Estructuras de Datos y Listas en PROLOG 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas

1. Estructuras y árboles Una estructura de datos en PROLOG se puede visualizar mediante un árbol fecha(9, noviembre, 2005) frase(nombre, sintagma_verbal(verbo, nombre)) frase fecha 9 noviembre 2005 nombre Sintagma_verbal verbo nombre a+b*c + a * b c juan come pan frase(nombre(juan), sintagma_verbal(verbo(come), nombre(pan)))

2. Listas Una lista es una secuencia ordenada de términos (constantes, variables, estructuras, e, incluso, otras listas). Usos de Listas: análisis sintáctico, gramáticas, diagramas de flujo, grafos, etc. Manejo específico de listas -> LISP. La lista es un caso particular de estructura en PROLOG => definición recursiva.

2. Listas Tipo particular de árbol: cabeza y cola El functor/estructura asociado es. El final de la lista es [] Lista de un solo elemento:..(a, []) a [] Representación habitual de las listas: [a,b,c] [los, hombres, [van, a, pescar]] Lista: a, b, c. a..(a,.(b,.(c,[]))) Cabeza es el primer término. Cola es una lista que contiene al resto. b. c [] Un forma de instanciar a una lista con cabeza X y cola Y sería: [X Y]

3. Operaciones con Listas (I) Pertenencia Saber si un objeto pertenece a lista. [carlos_i, felipe_ii, felipe_iii, felipe_iv, carlos_ii] Construir el predicado miembro : miembro(x, [X _]). ( miembro(x, [Y _]):- X=Y. ) sólo comprueba coincidencia con la cabeza miembro(x, [_ Y]) :- miembro(x,y). Verifica la coincidencia a la cola y de forma recursiva va operando sobre otra lista progresivamente más pequeña?- miembro(felipe_ii, [carlos_i, felipe_ii, felipe_iii, felipe_iv, carlos_ii]).?- miembro(x, [carlos_i, felipe_ii, felipe_iii, felipe_iv, carlos_ii]).

Recursión (I) Natural en muchas definiciones declarativas Perspectiva operacional: natural si misma operación sobre distintos datos Esquema genérico 1. Caso base: entero(0). 2. Luego recurrir: entero(x):- entero(y), X is Y+1.

Recursión (II) Pertenencia (II) Cuidado con la recursión por la izquierda: enteromal(x):- enteromal(y), X is Y+1. enteromal(0).?- enteromal(x). ERROR: Out of local stack Colocar la regla como última cláusula de programa Evitar definiciones circulares: padre(x, Y) :- hijo(y, X). hijo(a, B) :- padre(b, A). (se entra en un bucle infinito)

3. Operaciones con listas (II) Insertar un elemento Queremos introducir un elemento X al comienzo de la Lista. El elemento X pasará a ser la nueva cabeza de la nueva lista. El cuerpo de la nueva lista será la antigua Lista. Definición: insertar(x, Lista, Resultado) :- Resultado = [X Lista]. Versión compacta: Ejemplos: insertar2(x, Lista, [X Lista]).?- insertar(1, [3, 5, 7], Primos). Primos = [1, 3, 5, 7] Yes?- insertar2(rojo, [verde, azul], Colores). Colores = [rojo, verde, azul] Yes

3. Operaciones con listas (III) Predicado Concatena Existe un predicado predefinido append:?- append([a, b, c], [1, 2, 3], X). X=[a, b, c, 1, 2, 3]?- append(x, [b, c, d], [a, b, c, d]). X=[a]?- append([a], [1, 2, 3], [a, 1, 2, 3]). Yes?- append([a], [1, 2, 3], [alfa, beta, gamma]). No Definición: concatena([], L, L). concatena([x L1], L2, [X L3]) :- concatena(l1, L2, L3).

4. Ejercicios (I) Definir las siguientes operaciones sobre listas: 1. es_lista? (Lista) Se corresponde Lista con la definición de lista en PROLOG. 2. longitud(l, Num) Determina el número de elementos de L. 3. ultimo (Ult, Lista) ultimo elemento de la lista. 4. Subconjunto(Lista1, Lista2) Es Lista1 un subconjunto de Lista2?

4. Ejercicios (II) Alterar frase Diálogo: Usuario: tu eres un ordenador Prolog: yo no soy un ordenador Reglas: Usuario: hablas francés Prolog: no_hablo alemán ( _ simula a, ) Aceptar frase en formato lista: [tu, eres, un ordenador] Cambiar cada eres por un [no, soy]. Cambiar cada hablas por un [no_,hablo]. Cambiar cada francés por un alemán.

Solución: alterar frase cambiar(tu, yo). cambiar(eres, [no, soy]). cambiar(hablas, [no_, hablo]). cambiar(frances, aleman). cambiar(x,x). alterar([], []). alterar([h T], [X Y]):- cambiar(h,x), alterar(t,y).?- alterar([tu, hablas, frances], X). X = [yo, [no_, hablo], aleman] ; X = [yo, [no_, hablo], frances] ; X = [yo, hablas, aleman] ; X = [yo, hablas, frances] ; X = [tu, [no_, hablo], aleman] ; X = [tu, [no_, hablo], frances] ; X = [tu, hablas, aleman] ; X = [tu, hablas, frances] ;

4. Ejercicios (III) Ordenación alfabética (I) Las palabras se considerarán una lista de números (enteros) correspondiente a su secuencia ASCII. Obtener la lista asociada a cada palabra:?- name(pala, X). X=[112, 97, 108, 97]. Comparación: amenor(x, Y) :- name(x, L), name(y, M), amenorx(l, M). amenorx([], [_ _]). amenorx([x _], [Y _]) :- X<Y. amenorx([a X], [B Y]) :- A=B, amenorx(x, Y).

Ordenación alfabética (II) Ejercicios: qué sucede si se elimina la relación amenor([], [_ _])? Modifíquese el fichero PROLOG para admitir dentro de amenor el caso de dos palabras iguales.

5. Prácticas Inventario de piezas (I) bicicleta rueda_delantera cuadro rueda_trasera llanta radios eje manillar sillín tracción llanta radios eje piñones eje plato pedales cadena

Práctica: inventario de piezas (II) Definir el árbol mediante las relaciones: pieza_basica(cadena). ensamblaje(bicicleta, [rueda_delantera, cuadro, rueda_trasera]). Construir relaciones piezas_de, que sirva para obtener la lista de piezas básicas para construir una determinada parte de (o toda) la bicicleta.