Inteligencia Artificial: Prolog

Documentos relacionados
Inteligencia Artificial: Prolog

Inteligencia Artificial: Prolog

Inteligencia Artificial: Prolog

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

Inteligencia Artificial: Prolog

Clustering. Departamento de Ingeniería Informática y de Sistemas Universidad de La Laguna

Listas en Prolog. Capítulo. Listas como sujetos

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

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Prolog: Listas (y II) MRC

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

FUNCIONES DE CADENAS DE CARACTERES (STRINGS) EN PHP. CONCATENACIÓN. STRLEN (LONGITUD) Y SUBSTR (EXTRAER SUBCADENA). (CU00821B)

La Herramienta Redmine para la Administración de Proyectos

PERIODO 3 SOFTWARE MANEJADOR DE BASE DE DATOS CONCEPTOS INTERMEDIOS DE MICROSOFT ACCESS

Programación Declarativa Ejercicios de programación con listas

Lenguajes de Programación Programación funcional

Compiladores: Sesión 3. Análisis léxico, expresiones regulares

1. Define que es un Autómatas finitos determinanticos y cuáles son sus elementos constitutivos (explique cada uno de ellos).

Trabajo Práctico 2 - Programación Lógica Viajante de comercio Fecha de entrega: jueves 30 de octubre, hasta las 21 hs.

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

ESTRUCTURAS DE DATOS Y ALGORITMOS

LENGUAJES Y GRAMÁTICAS

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

Introducción a la Programación en C Funciones

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

roducción a la programación con el lenguaje C usando el entorno de trabajo Dev-C. Nociones básicas de programación

Tipos Recursivos de Datos

STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C)

M a tl a b. Oriol Roca ARREGLOS EN MATLAB.

Tipos de Datos Recursivos

Introducción a ASP (Answer Set Programming - programación con conjuntos respuestos)

Tema 6: Estructuras de datos recursivas

Estructuras incompletas. Listas diferencia.

Representación de números en la recta real. Intervalos

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

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

Funciones GOTO computables

Guía 2: Listas, recursión e inducción

Parte de Algoritmos, de la asignatura de Programación Máster de Bioinformática Cadenas y expresiones regulares

TUTORIAL PROLOG. Lenguajes de programación Universidad Nacional de Colombia Santiago Carvajal Castañeda Mario Andrés Moreno Norato

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

TEMA 1: Los números reales. Tema 1: Los números reales 1

TEORÍA DE AUTÓMATAS Y LENGUAJES

SESIÓN PRÁCTICA 3: TRANSFORMACIONES DE DATOS PROBABILIDAD Y ESTADÍSTICA. PROF. Esther González Sánchez. Departamento de Informática y Sistemas

Práctica 6: Consultas

DEL AUTÓMATA FINITO A LA EXPRESIÓN REGULAR

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

Tema 5. Otros lenguajes de consulta relacionales

5.3 Tipos de Datos en Prolog

Fundamentos de Bases de Datos

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

AMZI! PROLOG. Inteligencia Artificial. Componentes básicas. Componentes adicionales. Listener. Componentes y Archivos

Inteligencia Artificial II Prolog I

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

INTRODUCCIÓN A LA POO EN C++

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

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

Introducción a la Programación en C

Introducción a PROLOG

Formularios: pantallas que se presentan a los usuarios de una base de datos para que tengan un acceso amigable a los datos y operaciones.

Tema 3. Patrones y Definiciones de Funciones

Departamento de Inteligencia Artificial Facultad de Informática Universidad Politécnica de Madrid

Modulo I: Introducción Gestores de Bases De Datos

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Tema 4.- Recursión e iteración

Tema 4: Programación funcional avanzada en Scheme

Tema 3. Listas Recursión sobre datos

Inteligencia Artificial (IS). Curso Trabajo sobre Inferencia en Redes Bayesianas

Programación Declarativa

Tema 12.- Entrada y Salida

Usando los operadores SET (Conjunto)

Metodologías de Programación II Listas en Lisp

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

Tema 6: Funciones recursivas

Tema 09: TAD Árbol binario

6. Operadores en PROLOG

Transcripción:

Inteligencia Artificial: Prolog Listas Christopher Expósito-Izquierdo 1, Belén Melián-Batista 2 {cexposit 1, mbmelian 2 }@ull.es Universidad de La Laguna (España)

Contenidos Qué es una lista? Operador El predicado member El predicado deleteall El predicado append Librería lists.pl 2 of 1

Qué es una lista? Una lista en Prolog es una estructura de datos que permite almacenar cualquier tipo de elemento definido en el lenguaje: constantes, variables y estructuras Las listas se definen encerrando sus elementos entre corchetes Los elementos de una lista se separan por comas La longitud de una lista es el número de elementos que contiene Una lista puede contener un número finito de elementos Los elementos de una lista pueden ser, a su vez, listas Existe una lista especial denominada lista vacía ([]) cuya longitud es cero 3 of 1

Qué es una lista? Ejemplos [antonio, luis, andrea, marta, pepe] [antonio, Z, 14, correr(maria), antonio] [antonio, saltar(pepe), [14, K, maria], luis] [] [[pepe,[luis, [maria]]], X, [], 92, correr(luis), []] 4 of 1

Operador Las listas no vacías en Prolog pueden descomponerse en cabeza y cola. Sin embargo, una lista vacía por definición no puede descomponerse de esta manera La cabeza y la cola de una lista se definen como sigue: La cabeza de una lista es su primer elemento La cola de una lista es una lista compuesta por todos los elementos que no son la cabeza El operador es posiblemente el operador más importante en Prolog para la manipulación de listas de elementos. Está destinado a realizar la descomposición de una lista en su cabeza y su cola 5 of 1

Operador A continuación podemos ver varios ejemplos del uso del operador : 6 of 1

Operador El operador permite obtener los primeros n elementos de una lista. Para ello hay que especificar n variables a la izquierda del operador. A continuación se muestran ejemplos en los que se extraen 1, 2 y 3 primeros elementos de una lista: 7 of 1

Operador Qué sucede si solo nos interesa el quinto elemento de una lista? Efectivamente, mediante la consulta anterior hemos obtenido el quinto elemento de la lista, tal como deseábamos. Sin embargo, tenemos mucha más información adicional e irrelevante para nosotros 8 of 1

Operador En aquellos casos en que no se esté interesado en información adicional a nuestra consulta, se puede evitar que el intérprete nos la proporcione empleando la variable anónima:. A continuación podemos ver un ejemplo de su uso: 9 of 1

Operador De forma similar, pueden extraerse únicamente elementos contenidos en listas anidadas. A continuación podemos ver un ejemplo de esto: 10 of 1

El predicado member Objetivo: definir un predicado en Prolog que determine si un cierto elemento se encuentra en una lista El predicado propuesto debe tener dos argumentos: 1. El elemento a buscar 2. La lista en la que buscar 11 of 1

El predicado member Un elemento está en una lista si es el primer elemento de la misma. Esto significa que el elemento a buscar coincide con la cabeza de la lista. Se puede expresar en Prolog con el siguiente hecho: member(elemento, [Elemento Cola]). 12 of 1

El predicado member Por otro lado, un elemento está en una lista en la que no es su cabeza si está en la cola de la misma. Dado que la cola de una lista es, a su vez, una lista, podemos emplear el predicado member de forma recursiva para comprobarlo. Esto puede expresarse a través de la siguiente regla: member(elemento, [Cabeza Cola]) :- member(elemento, Cola). 13 of 1

El predicado member La definición del predicado member la guardamos en un fichero de texto denominado mypredicatemember.pl. Este fichero debe ser cargado en el intérprete antes de poder emplear el predicado. A continuación podemos ver ejemplos del uso: 14 of 1

El predicado member Podemos también consultar cuáles son los elementos miembros de una determinada lista. A continuación vemos un ejemplo: 15 of 1

El predicado deleteall Objetivo: definir un predicado en Prolog que elimine un cierto elemento de una lista tantas veces como aparezca El predicado propuesto debe tener tres argumentos: 1. La lista en la que queremos eliminar 2. El elemento a eliminar 3. La lista obtenida al haber eliminado el elemento 16 of 1

El predicado deleteall Si la lista se encuentra vacía, cualquier elemento que se quiera eliminar da como resultado otra lista vacía. Esto se puede expresar en Prolog con el siguiente hecho: deleteall([],, []). 17 of 1

El predicado deleteall Por otro lado, si el elemento a eliminar es el primero de la lista, la lista resultante no se ve afectada en forma alguna. Además, en tal caso, se procede a eliminar el elemento de la cola de la lista. Esto puede expresarse a través de la siguiente regla: deleteall([cabeza Cola], Elemento, Resultado) :- Cabeza = Elemento, deleteall(cola, Elemento, Resultado). 18 of 1

El predicado deleteall Por último, si el elemento a eliminar no es el primero de la lista, la lista resultante debe tener como cabeza ese mismo elemento dado que no va a eliminarse. Además, al igual que en la regla anterior, debemos eliminar el elemento de la cola de la lista. Esto puede expresarse a través de la siguiente regla: deleteall([cabeza Cola],Elemento,[Cabeza Resultado]) :- dif(cabeza, Elemento), deleteall(cola,elemento,resultado) 19 of 1

El predicado deleteall La definición del predicado deleteall la guardamos en un fichero de texto denominado mypredicatedeleteall.pl. Este fichero debe ser cargado en el intérprete antes de poder emplear el predicado. A continuación podemos ver ejemplos del uso: 20 of 1

El predicado append Objetivo: definir un predicado en Prolog que concatene dos listas de elementos El predicado propuesto debe tener tres argumentos: 1. La primera de las listas a cuyos elementos van a concatenarse los de la siguiente lista 2. La segunda de las listas cuyos elemento van a ser concatenados a los de la anterior lista 3. La lista obtenida al haber concatenado los elementos de las dos listas anteriores 21 of 1

El predicado append Si la primera de las listas se encuentra vacía, la lista resultante es la misma que la segunda de las listas. Esto puede expresarse a través del siguiente hecho: append([], Lista, Lista). 22 of 1

El predicado append Si la primera lista no se encuentra vacía (tiene cabeza y cola), la lista resultante tiene como cabeza la cabeza de la primera lista y como cola la concatenación de los elementos que integran la cola de la primera lista y los de la segunda lista. Esto puede expresarse a través de la siguiente regla: append([cabeza Cola], Lista,[Cabeza ColaResultado]) :- append(cola, Lista, ColaResultado). 23 of 1

El predicado append La definición del predicado append la guardamos en un fichero de texto denominado mypredicateappend.pl. Este fichero debe ser cargado en el intérprete antes de poder emplear el predicado. A continuación podemos ver ejemplos del uso: 24 of 1

Librería lists.pl Esta librería proporciona un amplio conjunto de predicados destinados a la manipulación de listas en Prolog Algunos de los predicados definidos en la librería son: member, append, select, delete, reverse, subset, union, same length, etc. La librería se encuentra cargada por defecto en SWI Prolog. De esta forma, los predicados definidos en ella pueden ser empleados sin necesidad de realizar ninguna operación Documentación acerca de la librería: http: //www.swi-prolog.org/pldoc/man?section=lists 25 of 1

Librería lists.pl A continuación podemos ver un ejemplo de su uso: Debe notarse aquí que no se realizado la carga de ningún fichero de predicados para poder hacer uso de la librería. 26 of 1

Inteligencia Artificial: Prolog Listas Christopher Expósito-Izquierdo 1, Belén Melián-Batista 2 {cexposit 1, mbmelian 2 }@ull.es Universidad de La Laguna (España) 27 of 1