5.3 Tipos de Datos en Prolog

Documentos relacionados
5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

Tema 2. La Sintaxis. 1. El vocabulario de un programa PROLOG

6. Operadores en PROLOG

Tema 2: Listas, aritmética y operadores

Tema 6: Representación lógica del conocimiento

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

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

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

Tema II: Introducción al Lenguaje Funcional

Programación en PROLOG(1)

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

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

Programación declarativa ( )

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

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

Principios de Computadoras II

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

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

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

Listas en Prolog. Capítulo. Listas como sujetos

Tema 1: Revisión de Prolog

Tema 2.- Expresiones y funciones

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

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

Métodos de Inteligencia Artificial

Unidad II: Análisis semántico

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

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

Programación n en Prolog

El lenguaje C. 1. Identificadores, constantes y variables

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

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

Tema 3. Tipos de datos simples

Generación de Código Intermedio

UNIDAD 2 Descripción de un programa

Prof. María Alejandra Quintero. Informática Año

Curso de Programación Avanzada en C

El lenguaje Prolog. Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Representación de la información

AMBIENTES DE COMPILACION

4.7 Operaciones sobre Objetos en Scheme

4.7 Operaciones sobre Objetos en Scheme. Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores

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

Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre

1. El vocabulario de un programa PROLOG

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:

Tema 2. Tipos predefinidos

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:

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

Práctica II. Prolog II: Meta Intérprete Vanilla

El lenguaje de programación Prolog

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

Lenguajes de Programación Programación funcional

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

DISEÑO ESTRUCTURADO USANDO HERRAMIENTAS DE

Introducción a la programación

Entorno y herraminetas

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

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

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

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)

LÓGICA DE PREDICADOS 5. IDENTIDAD Y FUNCIONES

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

Programación con Listas

INDUCCIÓN. Inducción - 2

INDUCCIÓN Instituto de Computación Lógica Inducción - 1

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

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

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

Programación lógica con listas

LENGUAJES DE PROGRAMACIÓN

Operador de corte (cut): Motivaciones. Cut (!): Definición formal. Cut (!): Implicancias de la Definición. Aplicaciones. Cut (!): Ejemplo. b,!

Tema 3.- Predicados y sentencias condicionales

Cómo Implementar una Ontología? Prolog Datalog Description Logic

Tema: Análisis de código intermedio

Introducción a PROLOG

Contenido. Prólogo... Prólogo a la edición en español Argumentos y proposiciones lógicas Introducción

Transcripción:

5.3 Tipos de Datos en Prolog Recocimiento de Tipos Se recoce el tipo de un dato por su forma sintáctica; 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) Objetos de Datos en Prolog Objetos de datos simples Objetos estructurados Calce de operaciones fundamentales sobre objetos 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: + - * / < > = :. & _ ~ Tipos de Objetos de Datos Objetos de datos Objetos simples Objetos estructurados Constantes Variables 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 Atomos Números 1

Números Ejemplo con Figuras Geométrica 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 son su fuerte (el entero es lo que más se usa) 6 4 2 P1 = (1, 1) P2 = (2,3) (6,4) S = seg(p1, P2) P2 = (2,3) T = triangulo ((4,2), (6,4), (7,1)) S (4,2) T (7,1) P1 = (1,1) 2 4 6 8 Variables Representación de Árbol de Estructuras 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, _). % se imprime variable tiene_hijo(x) :- padre(x, _). Ámbito de variable es una cláusula 4 2 T = triangulo 6 4 7 1 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) 5.4 Calce de Térmis en Prolog 2

Concepto de Calce La operación más importante sobre térmis es el calce, que corresponde a la unificación en el cálculo de predicados. Dos térmis calzan si: ❶Son idénticos ❷Las variables en ambos térmis pueden ser instanciados, sustituyendo variables, tal que los térmis se hacen idénticos. 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). 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 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 (mes general) que la anterior. Prolog calza el resultado a su forma más general! 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. Reglas de Calce Dos térmis 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. 3

Ejemplo de Calce de Estructuras Significado Declarativo?- triangulo((1, 1), A, (2, 3)) = triangulo(x, (4, Y), (2, Z)). A = (4,H193) X = (1,1) Y = H193 Z = 3 triangulo A X triangulo 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. 1 1 2 3 4 Y 2 Z Ejemplo de Calce con Estructuras Disjunción en Cláusulas?- vertical(seg((1,1), (1,2))).?- vertical(seg((1,1), (2,Y))).?- horizontal(seg((1,1), (2,Y))). Y = 1?- vertical(seg((2,3), Y)). Y = (2,H561)?- vertical(s), horizontal(s). S = seg((h576,h577),(h576,h577)) 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 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: 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. Para resolver P, primero se debe resolver Q y luego R. Para satisfacer a P, primero se debe satisfacer Q y luego R. 4

Visión Procedural Representación de Listas Lista de metas programa Ejecución Indicador de éxito/fracaso Instanciación de Variables Una lista define un árbol binario, similar a las listas propias de Scheme. Prolog permite una tació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 []. Sólo si hay indicación de éxito Sólo si hay indicación de éxito Ejemplo:?- L2 = [ a [b []]]. L2 = [a,b] Algus Posibles Operadores sobre Listas 5.5 Listas y Operadores 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) Listas en Prolog Definición de Operadores (1/2) 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) %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 esté vacía conc([x L1], L2, [X L3]) :- conc(l1, L2, L3). 5

Definición de Operadores (2/2) Permutación de una Lista % 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 está en la cabeza del(x, [Y Cola1], [Y Cola2]) :- del(x, Cola1, Cola2). % Permutar la lista L % ============== permutation([], []). permutation(l, [X P]) :- del(x, L, L1), permutation(l1, P). Ejemplos de Operadores con Listas Ejemplo de Permutación?- member(x, [a, b]). X = a ; X = b ;?- conc([a], [b], L). L = [a,b] ;?- add(a, X, Y). X = H918 Y = [a H918] ;?- del(b, [a, b, c, b, d], L). L = [a,c,b,d] ; L = [a,b,c,d] ;?- 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] ; Sublistas Una sublista es una parte de una lista El operador puede ser definido con la siguiente regla: sublist(s, L) :- conc(l1, L2, L), conc(s, L3, L2). Ejemplo: 5.6 Operadores y Aritmética?- sublist([b, X], [a, b, c, d]). X = c 6

Notación de Operadores Las operaciones en Prolog se expresan rmalmente 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++ Tipos de Operadores Operador Infijo (tres tipos) xfx xfy yfx Operador Prefijo (dos tipos) fx fy Operador Postfijo (dos tipos) xf yf Donde la tación se interpreta como. f corresponde al mbre del operador x e y representan los argumentos x representa operando con precedencia estrictamente mer que el operador y representa operando cuya precedencia es mer o igual que el operador Ejemplo de Operadores Conjunto de Operadores Predefinidos 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 * :- op(1200, xfx, :- ). :- op(1200, fx, [:-,?-] ). :- op(1100, xfy, ; ). :- op(1000, xfy,, ). :- op(700, xfx, [=, is, <, >, =<, >=, ==, =\=, \==, =:=] ). :- op(500, yfx, [+, -] ). :- op(500, fx, [+, -, t] ). :- op(400, yfx, [*, /, div] ). :- op(300, xfx, mod). Definición de Operadores Ejemplo: Operadores Matemáticos 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).?- X = 3 + 5. X = 3 + 5.?- X is 3 + 5. X = 8.?- X is 5/3. X = 1.66666666666667.?- X is5-2 -1. X = 2.?- 1 + 2 = 2 + 1.?- 1 + 2 =:= 2 +1. 7

Ejemplo: Máximo Común Divisor Ejemplo 2: Largo de una Lista 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). 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 ; Ejemplo: Máximo Común Divisor?- mcd(100, 10, X). X = 10?- mcd(27, 36, X). X = 9 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 8