Programación en PROLOG(1)

Documentos relacionados
Inteligencia Artificial 2º cuatrimestre de 2009

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

INTELIGENCIA ARTIFICIAL II

Métodos de Inteligencia Artificial

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

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

Introducción a PROLOG

Inteligencia Artificial 2º cuatrimestre de 2009

Inteligencia Artificial: Prolog

5.3 Tipos de Datos en Prolog

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

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

23/09/2009. Introducción Hello word La familia Buendía Recursión Listas

Trabajo Práctico 2: Programación Lógica

Listas en Prolog. Capítulo. Listas como sujetos

Programación Declarativa. Programación Lógica.

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

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

Control en Prolog. Control

Semántica Operacional para la Programación en Lógica Lógica para Ciencias de la Computación

Programación lógica. Paradigmas de Lenguajes de Programación. Segundo cuatrimestre de Clase práctica (primera parte)

1. Sintaxis de Prolog

LENGUAJES DE PROGRAMACIÓN

6 CORTE Y ARITMÉTICA. Ejemplo 24 Asumamos el siguiente programa que define que el padre de una persona es su antecesor hombre:

Algoritmos y programas. Algoritmos y Estructuras de Datos I

6. Operadores en PROLOG

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 Funcional en LISP Lógica para Ciencias de la Computación

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

Metodología de Programación I Corte y Aritmética

Inteligencia Artificial II Prolog I

Aprendizaje Automático

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

Capítulo V: Programación Lógica

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

Lógica como Representación. Dr. Eduardo Morales/Dr. Enrique Súcar

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

Tema 6: Representación lógica del conocimiento

PROGRAMACIÓN LÓGICA. David Felipe Rico Hernandez Gabriel Esteban Bejarano Delgado

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

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

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

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

Algoritmo de unificación de Robinson

Teoría de los Lenguajes de Programación Práctica curso

1 INTRODUCCIÓN 2 SWI PROLOG 29/08/2014 PROLOG IMPLEMENTACIONES DE PROLOG

Metaprogramación. Ingeniería Informática. Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

El lenguaje de programación Prolog

Lenguajes de programación

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

Programación Exploratoria - Predicados Predefinidos en Prolog -

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

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

Programación n en Prolog

1. El vocabulario de un programa PROLOG. 1. El vocabulario de un programa PROLOG. Sintaxis: Conjunto de caracteres válidos v

Tema 3: Introducción a Prolog

Tema 2.- Expresiones y funciones

Control de retroceso. Corte y negación (2010/2011)

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

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

DATOS DE IDENTIFICACIÓN DEL CURSO Departamento de Ciencias Computacionales. Inteligencia Artificial

21/03/2018. Variables y Constantes. Los datos de un programa están representados por variables o constantes y tienen asociado un tipo.

el proceso de backtracking.

5.2 Introducción a Prolog. Lenguaje Prolog. Características de Prolog. Su nombre viene de Programación en Lógica, creado a comienzos de los 70:

Metodología de Programación I Introducción a la Programación Lógica

Inteligencia en Redes de Comunicaciones - 04a Prolog

Programación Lógica. David Barrera Steven Bustos Jhonatan Guzmán

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

Programación Declarativa Universidad de Málaga

Programas mutantes: manipulación de la base de conocimiento

LÓGICA FORMAL TEORIAS DE PRIMER ORDEN. Sintaxis y semántica

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas

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

Verificación de Modelos

Claúsulas de Horn. Resolución SLD

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

UNIDAD 2 Descripción de un programa

Índice. Semántica. Sintaxis ASP. Introducción a Answer Set Programming (I) 2.- Programas Lógicos con Negación. 1.- Programas lógicos sin negación

PROgramación LOGica PROLOG

Paradigma lógico Lógica proposicional Resolución. Programación Lógica. Eduardo Bonelli. Departamento de Computación FCEyN UBA. 10 de octubre, 2006

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información CI3661 Taller de Lenguajes de Programación I Enero-Marzo 2015

Programación Elemental con Bases de Datos y Programación El lenguaje Prolog

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

Lógica en Ciencias de la Computación. Caso de estudio: PROLOG

Programación lógica con árboles. Introducción. Contenido. Introducción. 1. Programación con árboles 2. Otras estructuras arbóreas

Representación del conocimiento mediante reglas

ESTRUCTURAS DE DATOS

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

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Análisis Comparativo de Lenguajes - Año 2018 Práctico Nro. 2 Lenguaje Prolog Corresponde al Apunte El lenguaje de programación Prolog

Pre-Laboratorio 1 MA-33A : Introducción a Matlab

Práctica No. 6 Ejercicios en Prolog.

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

Para entender la recursividad primero tenemos que entender la recursividad

Lógica Proposicional IIC1253. IIC1253 Lógica Proposicional 1/64

Transcripción:

Programación en PROLOG(1) Inteligencia Artificial 2º cuatrimestre de 2008 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

Prolog Es el representante más conocido del paradigma lógico Prolog permite Definir/especificar relaciones entre objetos. Verificar si ciertos objetos están relacionados entre sí. A continuación veremos cómo 2

Sintaxis Informal nombres de relaciones (también llamadas predicados) y objetos. secuencias de caracteres comenzando con minúscula. Prolog cuenta con variables. Las variables denotan objetos sin especificar. nombres de variables secuencias de caracteres comenzando con mayúscula. 3

Sintaxis Informal Existen 3 tipos construcciones en PROLOG (llamadas cláusulas) : Hechos Permiten definir relaciones entre objetos. Reglas Consultas Permiten verificar si ciertos objetos están relacionados entre sí 4

Hechos permiten establecer que una determinada tupla de objetos están relacionados bajo una relación en particular. Sintaxis: r(obj 1, obj 2,,obj n ). la tupla (obj 1, obj 2,,obj n ) pertenece a la relación r amigo(homero, barny). suma(x, 0, X). socio_club(juan, liniers). socio_club_liniers(juan). relación de aridad 0: proposición ateniense(socrates). socrates_es_ateniense. 5

Reglas Permiten establecer que una determinada tupla de objetos están relacionados bajo una relación en particular, pero en términos de otras relaciones. Sintaxis: cabeza cuello cuerpo r(obj 1, obj 2,,obj n ) :- r 1 ( ),, r m ( ). Ej: mentiroso(x):- ateniense(x). gustos_en_comun(x,y):- gusta(x, Algo), gusta(y, Algo). 6

Programas Prolog Un programa Prolog es un conjunto de hechos y reglas. Ej: progenitor(homero, bart). progenitor(homero, lisa). progenitor(abraham, homero). abuelo(x,y):- progenitor(x,z), progenitor(z,y). definición del predicado progenitor/2 definición del predicado abuelo/2 7

Consultas permiten verificar si una determinada tupla de objetos están relacionados bajo una relación en partircular. Sintaxis:?- r(obj 1, obj 2,,obj n ). Ej:?- abuelo(abraham, lisa)?- abuelo(x, bart) bart tiene abuelo? 8

Consultas y Respuestas progenitor(homero, bart). progenitor(homero, lisa). progenitor(abraham, homero). abuelo(x,y):- progenitor(x,z), progenitor(z,y).?- progenitor(homero, lisa). yes?- progenitor(homero, abraham). no?- progenitor(marge, lisa). no?- abuelo(abraham, bart). yes?- abuelo(abraham, X). X = bart ; X = lisa ; abraham tiene no algún nieto? 9

Resolución SLD y Backtracking Resolución de la meta? a. 1) a : b, p. 2) a : e. 3) b : q. 4) b : e. 5) e.? a. yes a b, p e q, p e, p fail (1) (2) (5) (3) (4) p fail (5) 10

(Tipos de) Términos Hasta ahora solo utilizamos 2 tipos de términos... abuelo(abraham, X) términos constantes términos estructuras variables 11

Estructuras: Rep. de Arboles Binarios Arbol binario a a Representación en Pascal o en C b c b c d Representación en Prolog (recursiva) d estructura tree (a, tree(b, #, #), tree(c, tree(d, #,#), #)) memoria el functor tree tiene aridad 3 functor términos 12

Estructuras: Rep. de Arboles Binarios A continuación se define el predicado arbolbin/1 que usa la estructura para árboles binarios. % arbolbin(+termino) % Recibe como argumento un término y determina % si éste corresponde a un árbol binario válido. arbolbin(#). arbolbin(tree(r,hi,hd)):- arbolbin(hi), arbolbin(hd).?- arbolbin(tree(a,tree(b,#,#),#)). yes?- arbolbin(tree(a, a, #)). no 13

Estructuras: Rep. de Arboles Binarios Otro predicado que manipula árboles binarios. % altura(+bin, -Alt) % Recibe como argumento un árbol binario Bin % y retorna su altura Alt. altura(#, -1). altura(tree(r,hi,hd), A):- altura(hi, AHi), altura(hd, AHd), max(ahi, AHd, MA), suma(ma, 1, A).?- altura(tree(a,tree(b,#,#),#), A). A = 1 14

Estructuras: Rep. de Registros Nombre Bart Apellido Simpson Dirección Calle Av. Siempre Viva Nro 742 en Pascal Registro de datos personales en Prolog estructura datos_pers (nom(bart), ap(simpson), dir(calle(av_s_viva), nro(742) )) functores 15

Estructuras: Listas (rep. predefinida) Las listas también son estructuras, de aridad 2, solo cambia la notación. En lugar de: <functor_de_lista>(a,b) se usa [A B] para representar la lista con cabeza A y cola B. Ej: la lista formada por 1, 2 y 3: [ 1 [ 2 [ 3 [] ] ] ] que PROLOG permite notar abreviadamente de la siguiente forma: [ 1, 2, 3 ] 16

Listas: Ejemplo A continuación se define el predicado veces/3 que maipula listas. % veces(+x, +L, -C) % determina la cantidad C de apariciones de % un dado elemento X en una dada lista L. veces(x,[],0). veces(x,[x L],C):- veces(x,l,c1), suma(c1,1,c). veces(x,[y L],C):- veces(x,l,c). 17

Resolución SLD y Unificación?- arbolbin(tree(a,tree(b,#,#),#)). (2)? (1) arbolbin(#). (2) arbolbin(tree(r,hi,hd)):- arbolbin(hi), arbolbin(hd). 18

Unificación arbolbin(tree(a,tree(b,#,#),#)) Existe alguna sustitución de variables que los haga iguales? arbolbin(tree( R, Hi, Hd )) 19

Unificación arbolbin(tree(a,tree(b,#,#),#)) el proceso de hallar un unificador es la unificiación R por a Hi por tree(b,#,#) Hd por # arbolbin(tree( R, Hi, Hd )) { R por a, Hi por tree(b,#,#), Hd por # } es una sustitución unificadora, o simplemente unificador, para estos dos átomos. 20

arbolbin(tree(a,tree(b,#,#),#)). (2) {R por a, Hi por tree(b,#,#), Hd por #} arbolbin(tree(b,#,#)), arbolbin(#). (2) {R por b, Hi por #, Hd por #} arbolbin(#), arbolbin(#), arbolbin(#). (1) {} Unificación (1) arbolbin(#). arbolbin(#), arbolbin(#) (1) {} arbolbin(#) (1) {} (2) arbolbin(tree(r,hi,hd)):- arbolbin(hi), arbolbin(hd). 21

Predicado de Unificación (=/2)?- X = a. X = a yes?- X*Y = (2+3)*8.?- 5 = 2+3. no X = (2+3) Y = 8 yes 22

Predicado de Unificación (=/2)?- W = f(x), X = a. W = f(a) X = a yes?- W = a, W = b. no Una variable INSTANCIADA ya no se desinstancia 23

Predicado no unifica (\=/2) Tiene éxito cuando sus argumentos NO unifican. Es decir, devuelve yes cada vez que =/2 devuelve no y viceversa?- a \= a. no?- a \= b. yes?- X \= a. no 24

Predicado is/2 La meta T is E es exitosa si T unifica con el resultado de la evaluación de la expresión numérica E?- 5 is 2+3. yes T is E T = res_eval_e?- R = 10, R is 2+3. no?- R is 5*8. R = 40 yes?- 2+3 is 2+3. no?- W is [1,2,3] ERROR 25

Chequeo de variable singleton Una variable singleton es una variable que aparece sólo una vez en una cláusula. En ocasiones, la presencia de una variable singleton es una manifestación de un error cometido por el programador. Identifiquemos variables singleton en el siguiente programa y cuáles de ellas manifiestan un error. concat(lista, [], List). concat([x SubL1], L2, SubL1_L2):- concat(subl1, L2, SubL1_L2). miembro(x,[x L]). ERROR ERROR OK miembro(x,[y L]):- miembro(x,l). OK 26

Singleton Variable Warning La presencia de variables singleton es usualmente una manifestación de dos clases de errores cometidos por el programador: olvidó hacer algo que debía hacer con esa variable. cometió un error de nombre al intentar referirse a una variable introducida previamente (por ejemplo, un error de tipeo). concat(lista, [], List). concat([x SubL1], L2, SubL1_L2):- concat(subl1, L2, SubL1_L2). error de nombre olvidó hacer algo Al cargar un archivo conteniendo un programa PROLOG, el SWI muestra un WARNING para avisar al programador de la presencia de variables singleton. 27

Variables anónimas Cuando desea introducirse una variable singleton intencionalmente, como es el caso del predicado miembro/2, deberíamos utilizar variables anónimas. miembro(x,[x _L]). miembro(x,[_y L]):- miembro(x,l). De esta forma, estamos indicando al SWI que dichas variables son intencionalmente NO usadas, y así no recibiremos advertencias por ellas. 28

FIN