5.3 Tipos de Datos en Prolog

Documentos relacionados
5.3 Tipos de Datos en Prolog

6. Operadores en PROLOG

Tema 2: Listas, aritmética y operadores

Aritmética y operadores (2011/2012)

UNIVERSIDAD AUTÓNOMA DE GUERRERO UNIDAD ACADÉMICA DE MATEMÁTICAS. Apuntes de. PROGRAMACIÓN EN PROLOG Segunda Edición

Programación declarativa ( )

Inteligencia Artificial 2º cuatrimestre de 2009

Principios de Computadoras II

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

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

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

Unidad II: Análisis semántico

Predicados Extra-lógicos. Predicados Extra-lógicos. Contenido. Prolog = Programación lógica. Programa (cláusulas de Horn)

Tema 1: Revisión de Prolog

Métodos de Inteligencia Artificial

Tema 3. Tipos de datos simples

2º Certamen ILI-253 Lenguajes de Programación Juan Pablo Menichetti Jorge Mujica 10 de Junio del 2004

Programación Declarativa. Ingeniería Informática Cuarto curso. Primer cuatrimestre. Escuela Politécnica Superior de Córdoba Universidad de Córdoba

4.7 Operaciones sobre Objetos en Scheme

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

Capítulo V: Programación Lógica. 5.1 Breve Introducción al Cálculo de Predicados

Capítulo V: Programación Lógica

Generación de Código Intermedio

Semántica: principales usos. Semántica: principales enfoques. Semántica Operacional. Sintaxis abstracta de un lenguaje (sujeto) Semántica Operacional

Inteligencia Artificial II Prolog I

Representación de la información

El lenguaje de programación Prolog

El lenguaje C. 1. Identificadores, constantes y variables

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:

PROgramación LOGica PROLOG. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

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

Programación con Listas

Algoritmos y programas. Algoritmos y Estructuras de Datos I

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

Curso de Programación Avanzada en C

Tema 3.- Predicados y sentencias condicionales

INTRODUCCIÓN BÁSICA. Ingeniería Informática AL PROLOG. Departamento de Informática

1. El vocabulario de un programa PROLOG

4. Predicados predefinidos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

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

Lenguajes de Programación Programación funcional

Mathematica como lenguaje de programación

Tema 2.- Expresiones y funciones

Tema 2. Concepto de Algoritmo

Tema 5: Otros predicados predefinidos

Un. VI. Generador de código intermedio.

Introducción a la programación

Metodología de Programación I Tutorial Prolog 1/3

Ing. Iván Adrianzén Olano. Programación Lógica

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Datos y tipos de datos

PHP: Lenguaje de programación

Lógica de predicados

SISTEMA DE NUMEROS REALES

Cálculo de predicados. Lógica de predicados. Cálculo de predicados. Cálculo de predicados 08/06/2011

Tema 1.4. Un lenguaje mínimo y su procesador: El lenguaje objeto y la máquina virtual

Factorización de polinomios. Profa. Anneliesse Sánchez y Profa. Caroline Rodriguez Departamento de Matemáticas Universidad de Puerto Rico

Proyecto Unico Interpretador de MiniLogo

Trabajo Práctico N o 1 - Programación Lógica Fecha de entrega: 19/05/2005 hasta las 21hs

Lógica proposicional

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

Lógica Proposicional. Guía Lógica Proposicional. Tema I: Proposiciones

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:

Árboles de Decisión Árboles de Sintaxis

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

INDUCCIÓN. Inducción - 2

Tema 2. Tipos predefinidos

Etapas en la solución de un problema

Axiomas del Cálculo de Predicados

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

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

Representación del conocimiento. M.I. Jaime Alfonso Reyes Cortés

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

Tema#2. Tipos de Datos 10

Introducción a Haskell. El lenguaje Haskell

Dra. Jessica Andrea Carballido

Factorización de polinomios. Profa. Anneliesse Sánchez y Profa. Caroline Rodriguez Departamento de Matemáticas Universidad de Puerto Rico

RECORRIDO EN ARBOLES

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

Introducción al Modelado de Sistemas Capítulo 4

Inteligencia Artificial 2º cuatrimestre de 2009

EXPRESIONES ALGEBRAICAS. POLINOMIOS

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Predicados Básicos de Prolog TAII(I) - Curso

ESTRUCTURAS DE DATOS Y ALGORITMOS

Operadores y Expresiones

Proyecto Unico Interpretador de SetCalc

Tipos de datos algebraicos

Profesor: José Miguel Rubio L.

CONJUNTOS. Los conjuntos son conceptos primitivos que representan una totalidad, una reunión de cosas.

Resumen anual de Matemática 1ª Convocatoria: jueves 24 de noviembre, 2016 Octavo nivel 2ª Convocatoria: miércoles 1 de febrero, 2017 broyi.jimdo.

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

5. Entrada y Salida en PROLOG

Tipos de datos y Operadores Básicos

Transcripción:

5.3 Tipos de Datos en Prolog Objetos de Datos en Prolog Objetos de datos simples Objetos estructurados Calce de operaciones fundamentales sobre objetos 1

Tipos de Objetos de Datos Objetos de datos Objetos simples Objetos estructurados Constantes Variables Atomos Números Reconocimiento de Tipos Se reconoce el tipo de un dato por su forma sintáctica; no se requiere de declaración de tipos Ejemplo: Variables se definen comienzan con primera en mayúsculas (e.g. X) Atomos comienzan con una letra en minúscula (e.g. pedro) 2

Formación de Variables y Átomos Strings de los siguientes caracteres: Letras mayúsculas A..Z Letras minúsculas a..z Dígitos 0..9 Caracteres especiales: + - * / < > = :. & _ ~ Atomos 1) Strings de letras, dígitos y underscore (_), comenzando con minúscula pedro nil x_25 algo_especial 2) Strings de caracteres especiales <----> ===>... 3) Strings con citación simple Juan San Francisco 3

Números Números enteros 13213 0-323 Reales 3.14-0.0234 100.2 Dado que Prolog es principalmente un lenguaje de computación simbólica, los números no son su fuerte (el entero es lo que más se usa) Variables Strings de letras, dígitos y underscore, comenzando con mayúscula o underscore. X Resultado _X1 _12 Si una variable aparece una solo vez en una cláusula, se puede usar variables anónima _?- padre(juan, _). yes % no se imprime variable tiene_hijo(x) :- padre(x, _). Ámbito de variable es una cláusula 4

Objetos Estructurados Son objetos que tienen varias componentes Estructuras son tratadas como un único objeto Se construyen usando un functor: fecha(22, mayo, 2000) Componentes pueden ser constantes, variables o estructuras. Fecha(Dia, mayo, 2000) Ejemplo con Figuras Geométrica 6 4 P2 = (2,3) (6,4) P1 = punto(1, 1) P2 = punto(2,3) S = seg(p1, P2) T = triangulo (punto(4,2), punto(6,4), punto(7,1)) 2 S (4,2) T P1 = (1,1) (7,1) 2 4 6 8 5

Representación de Árbol de Estructuras T = triangulo punto punto punto 4 2 6 4 7 1 5.4 Calce de Términos en Prolog 6

Concepto de Calce La operación más importante sobre términos es el calce, que corresponde a la unificación en el cálculo de predicados. Dos términos calzan si: ❶Son idénticos ❷Las variables en ambos términos pueden ser instanciados, sustituyendo variables, tal que los términos se hacen idénticos. Ejemplo de Calce Calzar: fecha(d, M, 2000) y fecha(d1, mayo, A1), entonces: D se instancia a D1 M se instancia a mayo A1 se instancia a 2000 Que como salida de Prolog se escribe: D = D1 M= mayo A1 = 2000 7

Ejemplo de Calce Calzar: fecha(d, M, 2000) y fecha(d1, julio, 1956), entonces: No es posible encontrar un calce (se dice que el proceso de calce ha fracasado). En caso contrario, se dice que el proceso ha sido exitoso. Ejemplo de Calce en Prolog?- fecha(d, M, 2000) = fecha(d1, mayo, A1). D = H86 M = mayo D1 = H86 A1 = 2000?- fecha(d, M, 2000) = fecha(d1, julio, 1956). no 8

Grado de Ajuste del Calce?- fecha(d, M, 2000) = fecha(d1, mayo, A1). Podría haber sido calzado como: D = 1 D1 = 1 M = mayo A1 = 2000 Pero esta forma es más restrictiva (menos general) que la anterior. Prolog calza el resultado a su forma más general! Reglas de Calce Dos términos S y T calzan, si: Si S y T son constantes, entonces S y T calzan si ambos son el mismo objeto. Si S es una variable y T cualquier cosa, entonces calzan y S se instancia como T. Viceversa, si T es variable, entonces T se instancia como S. Si S y T son estructuras, entonces calzan sólo si: ❶ S y T tienen el mismo functor, y ❷ Todas sus correspondientes componentes calzan. Instanciaciones resultantes es determinado por proceso de calce de componentes. 9

Ejemplo de Calce de Estructuras?- triangulo(punto(1, 1), A, punto(2, 3)) = triangulo(x, punto(4, Y), punto(2, Z)). A = punto(4,h193) X = punto(1,1) Y = H193 Z = 3 triangulo triangulo punto A punto X punto punto 1 1 2 3 4 Y 2 Z Ejemplo de Calce con Estructuras?- vertical(seg(punto(1,1), punto(1,2))). yes?- vertical(seg(punto(1,1), punto(2,y))). no?- horizontal(seg(punto(1,1), punto(2,y))). Y = 1?- vertical(seg(punto(2,3), Y)). Y = punto(2,h561)?- vertical(s), horizontal(s). S = seg(punto(h576,h577),punto(h576,h577)) 10

Significado Declarativo versus Procedural La cláusula: P :- Q, R. Se interpreta declarativamente como: p es verdadero si Q y R lo son. De Q y R se deriva P. En cambio una interpretación procedural sería: Para resolver P, primero se debe resolver Q y luego R. Para satisfacer a P, primero se debe satisfacer Q y luego R. Significado Declarativo Una meta G es verdadera (se satisface o se deriva lógicamente de un programa), ssi: ❶ Existe en el programa una cláusula C, tal que ❷ existe una cláusula I, instancia de C, tal que: La cabeza de I es idéntica a G, y todas las metas en el cuerpo de I son verdaderas. 11

Disjunción en Cláusulas La cláusula: P :- Q; R. Se puede interpretar como: P :- Q. P :- R. La cláusula: P :- Q, R; S, T, U. Se puede interpretar como: P :- Q, R. P :- S, T, U. Significado Procedural Especifica cómo responder a una pregunta Para obtener la respuesta es necesario satisfacer una lista de metas. Las metas pueden ser satisfechas si a través de la instanciación de sus variables se permite que del programa se deriven las metas. 12

Visión Procedural programa Lista de metas Ejecución Indicador de éxito/fracaso Instanciación de Variables Sólo si hay indicación de éxito Sólo si hay indicación de éxito 5.5 Listas y Operadores 13

Listas en Prolog Una lista en Prolog se puede escribir como: [perro, gato, ratón, loro] Sin embargo esto es sólo un sabor sintáctico, pues Prolog lo traduce una forma de estructura. Si existe la estructura.(cabeza, Cola), entonces:.(perro,.(gato,.(ratón,.(loro, [])))) equivale a la lista anterior (que es más legible) Representación de Listas Una lista define un árbol binario, similar a las listas propias de Scheme. Prolog permite una notación similar a los pares: L = [a Cola], donde a es la cabeza (cualquier tipo) y Cola es el resto de la lista (debe ser una lista). La lista vacía se expresa como []. Ejemplo:?- L2 = [ a [b []]]. L2 = [a,b] 14

Algunos Posibles Operadores sobre Listas Membresía del objeto X en la lista L: member(x, L) Concatenación de listas L1 y L2 en L3 conc(l1, L2, L3) Agregar un elemento X en una lista L add(x, L, L1) Borrar un elemento X en una lista L del(x, L, L1) Definición de Operadores (1/2) %definicion de membresia de X en una lista L: member(x, L). % ============================================ member(x, [X Cola]). member(x, [Cabeza Cola]) :- member(x, Cola). % concatenacion de listas L1 y L2 en lista L3: conc(l1, L2, L3). % ============================================== % concat. con lista vacia es la misma lista conc([], L, L). % caso de que primera lista no esté vacía conc([x L1], L2, [X L3]) :- conc(l1, L2, L3). 15

Definición de Operadores (2/2) % agregar un elemento en la cabeza % ========================== add(x, L, [X L]). % en realidad basta el operador % borrar un elemento de una lista % ====================== % elemento está en la cabeza del(x, [X Cola], Cola). % elemento no está en la cabeza del(x, [Y Cola1], [Y Cola2]) :- del(x, Cola1, Cola2). Ejemplos de Operadores con Listas?- member(x, [a, b]). X = a ; X = b ; no?- conc([a], [b], L). L = [a,b] ; no?- add(a, X, Y). X = H918 Y = [a H918] ; no?- del(b, [a, b, c, b, d], L). L = [a,c,b,d] ; L = [a,b,c,d] ; no 16

Sublistas Una sublista es una parte de una lista El operador puede ser definido con la siguiente regla: Ejemplo: sublist(s, L) :- conc(l1, L2, L), conc(s, L3, L2).?- sublist([b, X], [a, b, c, d]). X = c Permutación de una Lista % Permutar la lista L % ============== permutation([], []). permutation(l, [X P]) :- del(x, L, L1), permutation(l1, P). 17

Ejemplo de Permutación?- permutation([gato, perro, raton], L). L = [gato,perro,raton] ; L = [gato,raton,perro] ; L = [perro,gato,raton] ; L = [perro,raton,gato] ; L = [raton,gato,perro] ; L = [raton,perro,gato] ; no 5.6 Operadores y Aritmética 18

Notación de Operadores Las operaciones en Prolog se expresan normalmente como functores. Se permite también especificar operadores especiales con su relación de precedencia mediante directivas al traductor Prolog. Este mecanismo permite mejorar la lectura de programas (sabor sintáctico), similar a la sobrecarga de operadores en C++ Ejemplo de Operadores La expresión: +(*(2, a), *(b, c)) podría escribirse como: 2*a + b*c Que resulta más legible!! Ejemplo en Prolog:?- X = +(*(2, 3), *(4, 5)). X = 2 * 3 + 4 * 5?- X is +(*(2, 3), *(4, 5)). X = 26.?- X is 2*3 + 4*5. X = 26 Se ha supuesto que + tiene mayor precedencia que * 19

Definición de Operadores Se permite definición de operadores prefijos, infijos y postfijos A cada operador se le puede definir el nivel de precedencia mediante un valor (e.g. entre 1-1200 dependiente de la implementación) Nombre del operador debe ser un átomo Ejemplo: Operador binario infijo gusta :- op(600, xfx, gusta). Tipos de Operadores Operador Infijo (tres tipos) xfx xfy yfx Operador Prefijo (dos tipos) fx fy Operador Postfijo (dos tipos) xf yf Donde la notación se interpreta como. f corresponde al nombre del operador x e y representan los argumentos x representa operando con precedencia estrictamente menor que el operador y representa operando cuya precedencia es menor o igual que el operador 20

Conjunto de Operadores Predefinidos :- op(1200, xfx, :- ). :- op(1200, fx, [:-,?-] ). :- op(1100, xfy, ; ). :- op(1000, xfy,, ). :- op(700, xfx, [=, is, <, >, =<, >=, ==, =\=, \==, =:=] ). :- op(500, yfx, [+, -] ). :- op(500, fx, [+, -, not] ). :- op(400, yfx, [*, /, div] ). :- op(300, xfx, mod). Ejemplo: Operadores Matemáticos?- X = 3 + 5. X = 3 + 5. yes?- X is 3 + 5. X = 8. yes?- X is 5/3. X = 1.66666666666667. yes?- X is 5-2 - 1. X = 2. yes?- 1 + 2 = 2 + 1. no?- 1 + 2 =:= 2 +1. yes 21

Ejemplo: Máximo Común Divisor mcd(x, X, X). mcd(x, Y, D) :- X<Y, Y1 is Y-X, mcd(x, Y1, D). mcd(x, Y, D) :- Y<X, mcd(y, X, D). Ejemplo: Máximo Común Divisor?- mcd(100, 10, X). X = 10?- mcd(27, 36, X). X = 9 22

Ejemplo 1: Largo de una Lista largo([], 0). largo([ _ Cola], N) :- largo(cola, N1), N is N1 + 1. % Y ahora se consulta?- largo([a, b, [c, d], d, e], N). N = 5 Ejemplo 2: Largo de una Lista largo([], 0). largo([ _ Cola], N) :- largo(cola, N1), N = N1 + 1. % Y ahora se consulta?- largo([a, b, [c, d], d, e], N). N = 0 + 1 + 1 + 1 + 1 + 1 ; 23