Programmacion Declarativa - Prolog:



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

MANUAL BASICO DE INSTRUCCIONES Y COMANDOS SMART DFD 1.0

Tema IV Programación lógica con estructuras

José de Jesús Ángel Ángel, c Factorización

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

Introducción. Paradigma de Lógica Gran importancia en la I.A. Origen: prueba de teoremas y razonamiento deductivo. Lógica.

Programación declarativa ( )

5.1 Listas. Por qué usar listas?

Factorización. Ejercicios de factorización. José de Jesús Angel Angel.

INTRODUCCIÓN A PROLOG

Programación n declarativa: lógica y restricciones

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

El Supermercado. Hoy tengo que ir yo solo al supermercado a comprar un kilo de. . Voy a pasármelo bien en el supermercado.

Ecuaciones de primer y segundo grado

POLINOMIOS OPERACIONES CON MONOMIOS

Tema 1: Revisión de Prolog

Tema 3 : Algebra de Boole

INTRODUCCION A LA LÓGICA DE ENUNCIADOS

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

MI HERMANA LOLA. Financiado por: Texto: Àngels Ponce Ilustraciones: Miguel Gallardo

Hacer sonar la adicción

Milagros en el Mar. Currículo del Nuevo Testamento. Mateo 8:23-27; 14:22-33; Lucas 5:1-11. Versículo de Memoria

MATEMÁTICAS para estudiantes de primer curso de facultades y escuelas técnicas

Observaciones del profesor:

8. Sentencia return y métodos

MA-0125 MATEMÁTICA ELEMENTAL -Décimo Año- I EXAMEN PARCIAL 2012

Tema 6: Representación lógica del conocimiento

CONCEPTOS ALGEBRAICOS BASICOS

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B)

Tema 1: Fundamentos de lógica, teoría de conjuntos y estructuras algebraicas: Apéndice

UNIDAD 5. ESTRUCTURAS DINÁMICAS Y ESTÁTICAS DE ALMACENAMIENTO DE DATOS.

Condensadores. Tipos de Condensadores

1. El vocabulario de un programa PROLOG

Muchas veces la dislexia se confunde con un problema en la lectura y en la ortografía. Pero no es lo mismo, sobre todo en la manera de tratarla.

Homilía del Padre Cipriano Sánchez, L.C. Misa del Espíritu Santo 5 de noviembre de 2015 Capilla Universitaria.

Matrices Invertibles y Elementos de Álgebra Matricial

GEOMETRÍA ANALÍTICA 2º Curso de Bachillerato 22 de mayo de 2008

ficha introductoria nombre de la actividad autor/es nivel y destinatarios duración objetivos destrezas

Todo ciudadano debe cobrar sólo por serlo

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

Capítulo 4 PROLOG 4.1 Introducción

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

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Qué son los monomios?

MANUAL DE CREACIÓN DE CARPETAS PARA ACCESO POR FTP DE CLIENTES EN UN NAS

INSTITUTO VALLADOLID PREPARATORIA página 37

MACROECONOMÍA II Licenciatura en Administración y Dirección de Empresas Marzo 2004

2 año secundario. Función Lineal MINISTERIO DE EDUCACIÓN. Se llama función lineal porque la potencia de la x es 1. Su gráfico es una recta.

Movimientos en el plano

Construcción de Escenarios

1 INFORMÁTICA ESO: 4ºA

CLASE # 5 TÉCNICAS DE CAJA BLANCA

EXPRESIONES ALGEBRAICAS. POLINOMIOS

ESTRUCTURAS ALGEBRAICAS 1

Herramienta computacional.

ESTRUCTURAS ALGEBRAICAS

EQUIPAJES: RESPUESTAS

Listas en Prolog. Capítulo. Listas como sujetos

Tarea 4 Soluciones. la parte literal es x3 y 4

Programa de resolución de ecuaciones de primero y segundo grado

TEMA 3 POLINOMIOS NOMBRE Y APELLIDOS... HOJA 1 - FECHA...

Módulo 9 Sistema matemático y operaciones binarias

Apuntes de Matemática Discreta 1. Conjuntos y Subconjuntos

GRAFFITI: RESPUESTAS Y CRITERIOS DE CORRECCIÓN

INSTITUTO VALLADOLID PREPARATORIA página 9

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

DIVISIBILIDAD SOLUCIÓN:

Educación Tributaria y Formación Ciudadana

Este documento ha sido generado para facilitar la impresión de los contenidos. Los enlaces a otras páginas no serán funcionales.

E d u c a c i ó. para la... Convivencia DERECHOS HUMANOS. PDF created with pdffactory trial version

CONSEJOS DE SEGUIRDAD EN INTERNET

PREDICANDO AL VERDADERO JESÚS A.A.

Material N 15 GUÍA TEÓRICO PRÁCTICA Nº 12

REPORTE GRATUITO "Los 3 Simples Pasos Para Ganar Dinero Por Internet Sin Salir De Casa"

Lógica Proposicional Cálculo Proposicional de Orden Cero (Cero)

Problemas fáciles y problemas difíciles. Cuando a los niños les planteamos problemas de suma y resta, Laura dejó sin resolver el siguiente problema:

La identidad mexicana

SOBRE LA DESIGUALDAD DE CAUCHY

NUEVAS SOLUCIONES y CAMBIOS EN LA GESTION DEL NEGOCIO. JOSE LUIS LENCE Socio Director de Gesfarm Consultoria Farmacias

**NOTA** las partes tachadas todavía no están escritas, se ira actualizando poco a poco el documento

Mejoras introducidas MARKETING GIO

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

Tablas en HTML. Tipos de celdas. Ing. Tomás Urbina Programación Web y Desarrollo de la Plataforma Web

INSTITUTO VALLADOLID PREPARATORIA página 57

1. Sintaxis de Prolog

Presentación realizada por Juan Carlos Camus el 28 de junio de 2007, para un evento realizado por la empresa Inter-Media Ltda. En Santiago de Chile.

Los elementos que usualmente componen la identidad digital son:


Colegio Belen COMPUTACION

Hablar acerca de una persona de oración es algo interesante porque solo se puede llegar a ser esa PERSONA convirtiéndose en un orador.

Guía rápida para el uso correcto de la Identidad UDEM

Polinomios. Objetivos. Antes de empezar

Aprendamos sobre el VIH/SIDA. Millones de personas alrededor del mundo mueren de SIDA cada año. No importa de dónde venimos o a dónde vayamos,

LA OLA. Cinco cuentos para leer en voz alta. Autor: Antonio Pons

Transcripción:

Programmacion Declarativa - Prolog: Todas las clases de theoria (ahora no todas) para toda la gente a quien falta alguna cosa o para ellos que no pueden leer bien sus cosas escritas ;-) Paginas Web muy interessantes: http://www.afm.sbu.ac.uk/logic-prog/ El SWI- Prolog-Interpreter: http://www.swi.psy.uva.nl/projects/swi-prolog/ Universidad Brighton: http://burks.bton.ac.uk/burks/language/prolog/ http://www.amzi.com/ Documentos sobre Prolog: http://www.amzi.com/manuals/amzi6/amzidoc.htm Tutorial de Prolog: http://www.amzi.com/manuals/amzi6/pro/prfrtop.htm Lo mejor para buscar mas: http://groups.google.com/ grupo: comp.lang.prolog Nuevas versiones de este archivo siempre hay aquí: http://www.redshark.de/ugr Si falta algo o no esta correcto escribemelo por favor: mailto:blackshark@redshark.de

Programacion Declarativa: Jose Enrique Cano Despacho B4 03/10/2001 Examen: 80% Teoria 20% Practicas Libros: Prolog: Clock Sin + Mellish Programming in Prolog Winston H.P. LISP Bratko I Prolog Programming for Artificial Intelligence Historia: 1974 Kowalski 1975 Waren Pereina Pereina 1981 Prolog II, microprolog 1986 Turbo, Arity

Solo: Clausulas Horn, and ; or (no se utiliza) Reglas o Hechos: 1.Regla: A:-B,C,D. 2.Hecho: A. B,C,D A Logica Predicados 1. orden Elemento::= (Hecho) (regla) (consulto) (Hecho)::= (termino). (regla)::= (termino) :- (terminos). (consulta)::= (termino). (termino)::= (termino), (termino) (termino)::= (constante) (variable) (estructura) (constante)::= (numero) (atomo) (numero)::= -- 1.3, 3 (atomo)::= -- nombres : pepe, jose, (variable)::= _hola, Pepe, _ (variable anónimo) (estructura)::= padre(pepe,a,b,tiene(2)) padre(a) 10/10/2001:

espadre(enrigue7, enrigue8). espadre(enrigue7,arturru). espadre(enrigue7,margarita). espadre(enrigue8,maria). espadre(enrigue8,isabel). espadre(enrigue8,eduardo). esmadre(catalina,maria). esmadre(ana,isabel). esmadre(juena,eduardo). yes no?-espadre(enrigue7,enrigue8).?-espadre(enrigue8,arturru).?-espadre(x,arturru). X=enrigue7. no?-espadre(enrigue7,x). X=enrigue8. X=arturro X=margarita no?-espadre(x,isabel),espadre(abelo,x). X=enrigue8 Abelo=Enrigue7 no

?-espadre(_isabel),espadre(abela,_). Abelo=enrigue7 PROHIBIDO: espadre(espadre(abelo,x),isabel) solo Predicados 1. orden!! nuevas reglas: es_hicho(y,x):-espadre(x,y). es_hicho(y,x):-esmadre(x,y). 17/10/2001: yes?-es_hicho(isabel,ana). -> espadre(ana,isabel) -> esmadre(ana,isabel)?-es_hicho(x,enrigue). ->espadre(enrigue8,x) X=maria X=isabel X=eduardo -STRING: prolog -> lista -> [112, 114, 111, 108, 111, 103] p r o l o g [1,hola,X,3,[2,3]] [X Y] -> X primer elemento Y resto 1 hola,x,3,[2,3] Alt+124:

UNIFICATION de REGLAS: Variable libre ->variable con valor cambio de valor no es possible!! 1: T1 T2 Patternmatching: (para variables libres) A 2 A B => 1 lugar para 2 nombres 2: T1 falta algo 3: T1 constante Unification solo para constantes eguales 4 4 4: T1 estructura pepe(_,_) pepe(a,b) mismo nombre, mismo numero de elementos! 5: Listo correcto??? * = * unificacion? * \= * no unificacion?

-COMPARACIÓN X=Y X\=Y X<Y X>Y X=<Y X=>Y 19/10/2001: precio(panda,100,1000. precio(polo,1000,1300). precio(r5,1300,1800). precio(2x,1500,1900). precio(xantia,1900,2000). compra(coche,dinero):- precio(coche,min,max), Dinero=>Min, Dinero=<Max. para comparacion al minimo Dinero o Min/Max debe tener valor fijo!?-compra(r5,100). no?-compra(x,1000). -> x = Coche ->Dinero = 1000 ->precio(x,min,max) ->precio(panda,700,1000) ->1000>=700 ->1000<=1000 X=panda X=polo- -OPERADORES: = \= is (solo opera en la parte derecha, unifica con la izquierda) X is 2+3 X=5 = = \= = (identicamente lo mismo; no se opera!) 1+2= =1+2 true 3 = = 1+2 false =:= (tiene mismo valor; opera a dos lados) solo se puede utilizar variables con valor peorque operar con variables sin valor conocido no tiene sentido + - * *(2,3) es dato no cuenta! / X^Y (X Y) X mod Y X//Y

Que significa X//Y??? poblac(usa,203). poblac(india,548). poblac(china,800). poblac(espana,50) area(usa,3). area(india,1). area(china,4). area(espana,0.1). densidad(x,y):-poblac(x,poblac),area(x,area),y is poblac/area.?-densidad(china,x). X=200 X=usa Y=67.66?-densidad(X,Y). 24.10.2001 mujer(maria). padres(persona,madre,padre):-madre(persona,madre),padre(persona,padre). madre(juan,ana). madre(maria,ana). padre(juan,pedro). padre(maria,pedro).?-mujer(maria),padres(maria,m,p),padres(juan,m,p). M=ana P=pedro ->mujer(maria) true -> padres(maria,m,p) ->madre(maria,madre) ->madre(maria,ana) M=ana ->padre(maria,padre) ->padre(maria,pedro) P=pedro ->padres(juan,m,p) ->padres(juan,ana,pedro) madre(juan,ana),padre(juan,pedro) true

+(a,*(b,c)) f(x,g(x,a)) Listas se unifican elemento a elemento (si tienen mismo numero de argumentos) [1,2,0] [1,A,B] A=2 B=0 false B=[2,3,4] [1 B] [1,a,b] [1,2,3,4] (no se unifica) mas Ejemplos: cual se unifica? [X,Y,Z] [pepe,juan,antonio] X=pepe Y=juan Z=antonio [perro] [X Y] X=perro Y=[] [X,Y Z] [pepe,gusta,vino] X=pepe Y=gusta

Z=[vino] [[el,y] Z] [[el,perro] [a,b]] X=el Y=perro Z=[a,b] X=[b] [a X] [a,b] [a,b] [b,x] no [blarro Q] [A pepe] A=blarro Q=pepe no [] [A X] [] solo unifica con lista vacia o variable anonima

-MEMBER (PERTENECE): 26.10.2001 pertenece(x,[x _]). pertenece(x,[_ Cola]):-pertenece(X,Cola).?-pertenece(a,[1,a,b]). ->pertenece(a,[a,b]) yes?-pertenece(a,[1,2,3]) ->A=X ->X=1 ->_=[2,3] A=1 -> A=X -> _=1 ->Cola=[2,3] ->pertenece(a,[2,3]) A=2 (more y/n)?-pertenece(a,a).?-pertenece(a,b). no se para que sirve padre(x,y):- hijo(y,x). hijo(a,b):-padre(b,a). RECURSION (normalmente con listas) pertenece(x,[x,_]). pertenece( ):-pertenece( ) repeat - fail recursion -> bases de datos ->lista

-FACTORIAL: factorial(0,1). factorial(n,factorial):-m is N-1, factorial(m,facto),factorial is Facto * N. O=6?-factorial(3,O) ->N=3 ->O=Factorial ->M is 3-1 ->factorial(2,facto) ->Factorial is Facto * 3 ->factorial(2,facto) ->N=2 ->Facto=Factorial ->M= 2-1 ->factorial(1,facto 2 ) ->Factorial is Facto 2 * 2 ->factorial(1,facto 2 ) ->N=1 ->Facto 2 =Factorial ->M= 1-1 ->factorial(0,facto 3 ) ->Factorial is Facto 3 * 1 ->factorial(0,facto 3 ) ->N=0 -> Facto 3 =1 => O = Facto *3 = Facto 2 *2 *3 = Facto 3 *1 *2*3 = 1 *1*2*3 (more y/n)

-APPEND (ENCADENA): encadena ([1,2],[a,b],A) =>A=[1,2,a,b] encadena([],l,l). encadena([x Cola1),A,[X Cola2]):-encadena(Cola1,A,Cola2). S=[1,a,b]?-([1],[a,b],S) (more y/n) ->X=1 ->Cola1=[] ->A=[a,b] ->S=[1 Cola2] ->encadena([],[a,b],cola2) =>encadena([],l,l) ->L=[a,b] ->Cola2=L=[a,b]?-([1,2],[a,b],S) ->X=1 ->Cola1=[2] ->A=[a,b] ->S=[1 Cola2] ->encadena([2],[a,b],cola2) ->X=2 ->Cola1=[] ->A=[a,b] ->Cola2=[2 Cola2 2 ] ->encadena([],[a,b],cola2 2 ) =>encadena([],l,l) ->L=[a,b] ->Cola2 2 =L=[a,b] ->Cola2=[2 Cola2 2 ]=[2,a,b] ->S=[1 Cola2] S=[1,2,a,b] encadena([],l,l). encadena(x L],L1,[X L2]):-encadena(L,L1,L2). 02.11.2001????-encadena([a,b],1,2],L x ) ->X=a

->L=[b] ->L1=[1,2] ->L x =[a L2] Si diferentes predicados tienen variables con el mismo symbolo no es la misma variable! (-> L \= L x ) ->encadena([b],[1,2],l2) ->X=b ->L=[] ->L1=[1,2] ->L2=[b L2 x ] ->encadena([],[1,2],l2 x ) =>encadena([],l,l) ->L=[1,2] ->L2 x =[1,2] ->L2=[b,1,2] ->L x =[a L2] L x =[a,b,1,2] (more y/n)?-encadena(a,[a,b,c],[1,2,a,b,c]). ->A=[X L] ->L1=[a,b,c] ->X=1 =>A=[1 L] ->L2=[2,a,b,c] ->encadena(l,[a,b,c],[2,a,b,c]) ->L=[X 1 L 1 ] ->L1=[a,b,c] -> X 1 =2 =>L=[2 L 1 ] ->L2=[a,b,c] ->encadena(l 1,[a,b,c],[a,b,c]) =>encadena([],l,l) ->L 1 =[] ->L=[2] ->A=[1 L] A=[1,2] (more y/n)

blackshark is watching you! Observaciones: Letras o numeros en subscript (coma Facto 2 o L x ) solo hay para distinguir diferentes variables con mismos nombres. Creo que L2=[b L2] es mas dificil de leer que L2 x =[b L2] para nada mas que por eso utilizo letras y numeros en subscript