5.1 Listas. Por qué usar listas?



Documentos relacionados
Curso PHP Módulo 1 R-Luis

Ejemplos de conversión de reales a enteros

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos.

Clases de apoyo de matemáticas Fracciones y decimales Escuela 765 Lago Puelo Provincia de Chubut

MANAUAL DE MANTENIMIENTO PARA LA PÁGINA WEB DE PROYECTO ADL GESTOR DE CONTENIDOS

Presentaciones compartidas con Google Docs (tutorial)

Centro de Capacitación en Informática

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

SUMA Y RESTA DE FRACCIONES

2 Potencias y radicales

Práctica 1 - Pista de Carreras Programación II

MLM Matemática Discreta

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

Alberto Marcano Díaz

GUIA BREVE PARA EL ENVIO DE MAILING

x

MATERIAL 2 EXCEL 2007

Operaciones básicas, fórmulas, referencias absolutas, relativas y mixtas.

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

La ventana de Microsoft Excel

ESTRUCTURA DE DATOS: ARREGLOS

Modelos y Bases de Datos

Guía Práctica para el Uso del Servicio de Software Zoho CRM

Ecuaciones de primer grado con dos incógnitas

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

CURSO DE INTRODUCCIÓN AL WORD

PROYECTO EDUCATIVO LA CALERA

Los números racionales

Sitios remotos. Configurar un Sitio Remoto

Ampliación de Estructuras de Datos

El número de arriba de la fracción, el numerador, nos dice cuántas de las partes iguales están coloreadas.

Inteligencia Artificial II. Razonamiento con ontologías

RELACIONES DE RECURRENCIA

Descripción del programa GeneSis

CAPITULO 3 REDES HIBRIDAS-COMPLEJAS. 3.1 Descripción de la Red Híbrida Compleja (HCNN)

La pestaña Inicio contiene las operaciones más comunes sobre copiar, cortar y pegar, además de las operaciones de Fuente, Párrafo, Estilo y Edición.

Para crear una lista como la anterior, primero escribe la información, y después selecciona el texto y aplícale el formato de viñetas.

Divisibilidad y números primos

1 Introducción al lenguaje PROLOG

MDHIP - Metro Detroit Health Insurance Program

Introducción a Scratch Autor

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Ahora comencemos!... Las operaciones matemáticas fundamentales pueden realizarse de forma rápida y sencilla con Miicrosofftt Excell.

Fórmulas y funciones

ARREGLOS DEFINICION GENERAL DE ARREGLO

Manual Usuario Wordpress. Índice

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

UNIDAD 1. LOS NÚMEROS ENTEROS.

ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES

IIC Matemática Discreta

Guía Corta: Alcance y Asociaciones. 1. Preliminares: Nombres y Asociaciones

Ingeniería en Informática

Manual para el uso del Correo Electrónico Institucional Via Webmail

Para ingresar a la aplicación Microsoft PowerPoint 97, los pasos que se deben seguir pueden ser los siguientes:

TEMA II: REPRESENTACIÓN DE LA INFORMACIÓN

Tema 2. Software. Informática (1º Ingeniería Civil)

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

(Tomado de:

Los polinomios. Un polinomio es una expresión algebraica con una única letra, llamada variable. Ejemplo: 9x 6 3x 4 + x 6 polinomio de variable x

Trabajar con diapositivas

Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el C.

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

PROLOG Inteligencia Artificial Universidad de Talca, II Semestre Jorge Pérez R.

2_trabajar con calc I

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE DE MEDELLÍN. FACULTAD NACIONAL DE MINAS Escuela de Sistemas

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario

I. Seguridad y Privilegios de los usuarios del Sistema emaksimus.

Pilas y Colas. Capítulo 3

Capítulo 1 Documentos HTML5

forma de entrenar a la nuerona en su aprendizaje.

UNIDAD DE APRENDIZAJE IV

TEMA: ECUACIONES CON NÚMEROS NATURALES ECUACIONES DE PRIMER GRADO CON UNA INCÓGNITA.

Capítulo 6. Introducción a la POO

Propiedad Colectiva del Código y Estándares de Codificación.

En esta sección revisaremos como dar de alta cuentas de clientes así como los diferentes ajustes que se pueden aplicar a las mismas.

UNIDAD 6. POLINOMIOS CON COEFICIENTES ENTEROS

Descomposición factorial de polinomios

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

Operación de Microsoft Word

COPIA SEGURIDAD Y RESTAURACIÓN CURSO

PESTAÑA DATOS - TABLAS EN EXCEL

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx

Operación Microsoft Access 97

Capítulo 9. Archivos de sintaxis

UNIDAD I PROCESADOR DE TEXTOS

EDWIN KÄMMERER ORCASITA INGENIERO ELECTRÓNICO

Instructivo de Microsoft Excel 2003

Estructuras de datos abstractos (ADTs) Listas

EJERCICIOS EXCEL. Guardar el libro en tu pen drive, con el nombre PRACTICA1_ALUMNO_GRUPO.

Aproximación local. Plano tangente. Derivadas parciales.

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

Funciones, x, y, gráficos

Por ejemplo convertir el número 131 en binario se realiza lo siguiente: Ahora para convertir de un binario a decimal se hace lo siguiente:

ZCARTAS: Iniciación a la suma y resta de números enteros Introducción Actividad 1: Escenario con cartas numeradas desde -2 hasta 2...

Ministerio de Educación. Base de datos en la Enseñanza. Open Office. Módulo 5: Report Builder

Normalización de bases de datos

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico

ESTRUCTURA DE LOS SITIOS DE CATEDRAS

GUIA BASICA DE REGLETAS MATEMATICAS Aprender jugando con regletas matemáticas de Cuisenaire

SECRETARÍA DE FINANZAS DEL DISTRITO FEDERAL P05 PANEL DE CONTROL DEL PROGRAMA HONORARIOS

Transcripción:

Listas 5.1 Listas En este capítulo introducimos el tipo de dato más importante dentro de la programación en inteligencia artificial. Existe un lenguaje de programación llamado LISP (LISt Procesing), en el que las únicas estructuras de datos disponibles son las constantes y las listas. En Prolog, la lista es simplemente un tipo concreto de estructura. Por qué usar listas? Las listas son una manera fácil de trabajar en situaciones imprevisibles. Se utilizan en situaciones donde es difícil o imposible predecir el número de datos a ser guardados o manipulados. En muchos problemas de inteligencia artificial, el número de soluciones parciales a un problema cambia de forma dinámica durante la ejecución. Qué es una lista? En Prolog, una lista es un objeto que contiene un número arbitrario de otros objetos, cada uno de estos objetos se llaman elementos de la lista. He aquí una lista de enteros [1, 2, 3, 4, 5] Los elementos de una lista pueden ser de cualquier tipo de dato, incluso pueden ser a su vez listas [[juan,pepe,luis],[juana,pepa,luisa]]

Listas La lista que no contiene ningún elementos es la lista vacía [ ]. Cómo se declaran? La declaración en su forma general es domains listacosas = cosas* cosas = objeto Puede ser más sencilla esta declaración si es una lista de un tipo de dato predefinido. domains listaenteros = integer* Cómo se manipulan? Las listas se manipulan dividiéndolas en una cabeza y una cola. Una lista es realmente un objeto compuesto recursivo, que consiste en la cabeza que es el primer elemento, y la cola, que es a su vez una lista que contiene todos los elementos menos el primero.

Listas Ejercicio 5.1 Lista Cabeza Cola [a, b, c] a [b, c] [a] [ ] [[el, gato], maullo] [el, [gato, maullo]]

Unificación y listas 5.2 Unificación y Listas Se puede unificar una lista con otra: [X, Y, Z] = [a, b, c] X = a Y = b Z = c Como una variable que no está instanciada se puede unificar con cualquier objeto, podemos unificar una lista con una variable. X = [a, b, c] Debido a que una operación común con las listas es separar una lista en su cabeza y su cola, existe una notación especial en Prolog para representar la lista con cabeza X y cola Y. Esto se escribe [X Y ], donde el símbolo que separa X de Y es la barra vertical. Una expresión de esta forma, instanciará X a la cabeza de una lista e Y a la cola de la lista: [a, b, c] = [X Y ] X = a Y = [b, c] [a, b, c] = [X, Y Z] X = a Y = b Z = [c]

Unificación y Listas [a, b, c] = [X, Y, Z Cola] X = a Y = b Z = c Cola = [ ] Ejercicio 5.2 Unificar las siguientes listas indicando qué variables quedan instanciadas a qué valores: [ Cabeza Cola ] = [juan, come, pan] [ Cabeza Cola ] = [julia, es, una, enfermera] [ alguien escribe Cola ] = [Cabeza estas, notas] [ sevilla, unificar ] = [sevilla, [Ciudad]] [ sevilla, [unificar,vincular,buscar]] = [Cabeza Cola] [ sevilla, [unificar,vincular,buscar]] = [Cabeza, Cola] [nuevo, [ ]] = [Coche, Blanco, Cuento] [nuevo] = [Cabeza,Cola] [nuevo] = [Cabeza Cola] Debido a que una lista es una estructura recursiva, para utilizarla se necesitan algoritmos recursivos. Ejercicio 5.4 Haz un predicado escribir(lista) que escriba los elementos de una lista. Ejercicio 5.5 Haz un predicado pertenece(integer,lista) que verifique si integer se un elemento de la lista.

Listas y Recursión 5.3 Listas y Recursión Existen tres criterios de terminación muy importantes 1. Cuando la lista es vacía. 2. Cuando un elemento es encontrado. 3. Cuando una posición es encontrada. 5.3.1 Cuando la lista es vacía El esquema general es: /* Regla de terminación */ predicado([ ]):- procesar([ ]). /* Regla recursiva */ predicado([cabeza Cola]):- procesar(cabeza), predicado(cola). Ejercicio 5.6 Escribe un predicado cuenta elementos(l,n) de tal forma que N sea el número de elementos que tiene la lista L. Ejercicio 5.7 Escribe un predicado suma lista(l,n) de tal forma que si L es una lista de enteros, N es la suma de todos ellos. Ejercicio 5.8 Escribe un predicado copia(l1,l2), de tal forma que L2 es una copia de la lista L1.

Listas y Recursión Ejercicio 5.9 Escribe un predicado concatenar(l1,l2,l3), de tal forma que L3 es la concatenación de las listas L1 y L2. 5.3.2 Cuando un elemento es encontrado El esquema general es: /* Regla de terminación */ predicado(cabeza, [Cabeza Cola]):- procesar algo. /* Regla recursiva */ predicado(x, [Cabeza Cola]):- procesar algo, predicado(x, Cola). Ejercicio 5.10 Escribe un predicado reemplaza(e1,l1,e2,l2), que es verdad si E1 en la lista L1 es reemplazado por E2 para dar L2. reemplaza(1,[1,2,3],4,lista) Lista = [4,2,3] reemplaza(3,[1,2,3],5,lista) Lista = [1,2,5] reemplaza(1,lista,3,[2,4,3]) Lista = [2,4,1] reemplaza(1,[ ],3,Lista) No Solution

Listas y Recursión Ejercicio 5.11 Escribe un predicado i despues(e1,l1,e2,l2), que es verdad si la lista L2 es la lista L1 con el elemento E1 seguido del elemento E2. i despues(2,[1,2,3],4,lista) Lista = [1,2,4,3] i despues(1,[1,2,3],2,lista) Lista = [1,2,2,3] i despues(1,lista,2,[1,2,3,4]) Lista = [1,3,4] Ejercicio 5.12 Haz un predicado pos elem(e1,l1), que escriba la posición del elemento E1 en la lista L1. pos elem(6,[1,2,6]) 3 pos elem(6,[1,2,3]) No

Listas y Recursión 5.3.3 Cuando una posición es encontrada El esquema general es: /* Regla de terminación */ predicado(1,cabeza, [Cabeza Cola]):- procesar algo. /* Regla recursiva */ predicado(p, X, [ L]):- P1=P-1, predicado(p1,x, L). Ejercicio 5.13 Escribe un predicado posición(p,e1,l1) que indique qué elemento E1 hay en la posición P de la lista L1. posición(0, Elem, [1,2,6]) No Solution posición(1,elem,[4,5,6]) 4 Ejercicio 5.14 Escribe un predicado borra(n,l1,l2) que sea verdad si la lista L2 es el resultado de borrar de la lista L1 el elemento que está en la posición N. borra(1, Elem, [2,4,6], L) L=[4,6] borra(3,[2,4,6],l) L = [2,4]

Listas y Recursión Ejercicio 5.15 Escribe un predicado reem2(n,e,l1,l2) que sea verdad si un elemento de la lista L1 en la posición N es reemplazado por E para dar la lista L2. reem2(1, 4, [8,9,10], L) L=[4,9,10] reem2(3, 4, [8,9,10], L) L=[8,9,4] reem2(3, Elem, [8,9,10], [8,9,4]) Elem = 4 Ejercicio 5.16 Escribe un predicado insertar2(n,e,l1,l2) que sea verdad si L2 es la lista L1 con E precedido por el elemento que está en la posición N. insertar2(1, 6, [9,10,11], L) L=[6,9,10,11] insertar2(3, 6, [9,10,11], L) L=[9,10,6,11] Ejercicio 5.17: El master mind master mind([1,1,1,4,5], [1,1,7,5,3], M, H) M=2, H=1 master mind([1,2,3,4,5], [1,1,3,5,4], M, H) M=2, H=2