SlideShare una empresa de Scribd logo
Programación lógica
Ejercicios PROLOG en tu móvil
ANDROID
Descargar de Play Store
● Jekejeke Prolog Runtime de XLOG Technologies
○ Es el intérprete del lenguaje, ver video que viene
con la descarga
○ Emplearemos frecuentemente las opciones de su
menu; Close, New y Load
● Gestor de Archivos HD de Cheetah Mobile
○ Es un administrador de archivos, nos ayudará a
crear bases de conocimiento en archivos de texto
Ejemplo líneas del Metro
● Modelo de la CD de México
recortado a primer cuadro
● 4 líneas
● 25 estaciones
● 6 correspondencias
● En Prolog haremos una
base de conocimiento
● Responderá a preguntas
sobre posibles rutas origen-
destino
Declaraciones afirmativas
● La programación lógica permite formalizar hechos,
ejemplo:
“Hidalgo es una estación del metro”
“Allende es una estación de la línea azul del metro”
● En Prolog estas afirmaciones se representan:
estacion_metro(hidalgo).
linea(azul,allende).
Requisitos de sintaxis de las declaraciones
● No se utilizan mayúsculas
● Las declaraciones tienen dos partes
○ Predicado del lado izquierdo
○ Argumentos del lado derecho entre paréntesis
● Cada afirmación termina con un punto
● El nombre de un predicado compuesto puede usar el
símbolo de subrayado, no se permiten espacios ni
guiones
● La programación lógica también formaliza reglas o
restricciones, ejemplo:
“Una correspondencia se da entre dos líneas; la estación
común tiene el mismo nombre en ambas líneas"
En Prolog esta aseveración se representa:
correspondencia(E,L1,L2) :- linea(L1,E), linea(L2,E).
Planteamiento de reglas
Observaciones de la sintaxis
● Las reglas requieren de variables L1,L2,E
● Las variables se representan en mayúsculas
● Las mismas variables deben aparecer en ambos lados
de la regla
● Las dos partes de la regla se separan por :- que es el
símbolo de inferencia
● La regla debe terminar con punto
● La coma , significa “Y”
Base de conocimiento
● Es un conjunto de afirmaciones y reglas
● Se almacenan en archivos de texto
● El intérprete Prolog consulta la base de conocimiento
para responder a preguntas concretas, ejemplo:
? - linea(verde, allende). ↵
No
¿Allende es una estación de la línea verde del metro?
Crear base de conocimiento en el móvil
● Ejecutar el gestor de archivos File Manager
● Crear un directorio de trabajo de preferencia en la
tarjeta SD
● En el directorio de trabajo crear un archivo de texto con
la extensión .pl
● Escribir las afirmaciones de la base de conocimiento
● % al inicio de cada línea se tomará como un comentario
● No olvidar el punto al final de cada declaración
● Guardar el archivo de texto
Crear base de conocimiento en el móvil
Base de conocimiento, archivo metro.pl
● A nuestras afirmaciones les damos la forma:
linea(color, nombre_estacion, numero_estacion).
linea(azul,revolucion,1).
linea(azul,hidalgo,2).
...
linea(verde,hidalgo,1).
linea(verde,juarez,2).
….
linea(rosa,cuauhtemoc,1).
linea(rosa,balderas,2).
….
linea(gris,chabacano,6).
Cargar base conocimiento en Prolog
● Ejecutar Jekejeke Prolog
● Tomar la opción Load…
● Localizar directorio de trabajo y la base de
conocimiento, archivo .pl
● Si no hay mensaje de error, iniciar interrogatorio
● En caso de error ir a File Manager, abrir el archivo .pl,
corregirlo y guardarlo
● Volver a cargar con la opción Load…
● La opción New… da una nueva pantalla
Cargar base de conocimiento
Interrogando la base de conocimiento
● allende es una estación de la línea verde?
?- linea(verde,allende,_). ↵
NO
?-
● Las preguntas se escriben en el mismo
formato que las afirmaciones
● Las respuestas son solo “SI” o “NO”
● Argumentos en minúsculas son constantes
● El símbolo _ en la pregunta, es una variable
en blanco, su significado en esta pregunta
es; “no me interesa el número de estación”
Interrogando la base de conocimiento
● Todas las estaciones de la línea verde?
?- linea(verde,ESTACION,_). ↵
ESTACION = hidalgo ;
ESTACION = juarez ;
ESTACION = balderas ;
ESTACION = ninos_heroes ;
ESTACION = hospital_general ;
?-
● Argumentos con mayúscula inicial son
variables
● Con “verde” estamos afirmando una parte
● Cuando se emplean variables como
ESTACION, no se está pidiendo a Prolog
que confirme o niegue sino que encuentre
información
● El intérprete debe encontrar un valor para
ESTACION que haga verdadera la
pregunta
● Si existe más de un valor se teclea ; para
solicitar otra solución
Variables en las preguntas
● Al usar variables, Prolog presenta
“TODAS LAS SOLUCIONES POSIBLES”
Interrogando la base de conocimiento
● Todas las estaciones del metro ?
punto y ↵
punto y coma
Continua hasta que se agotan todas las posibilidades
Interrogando la base de conocimiento
● Con el uso de variables Prolog busca soluciones
● Lo anterior es posible porque la base de conocimiento
tiene afirmaciones reales que permiten generar
soluciones
● En la base de conocimiento se busca de “arriba a
abajo”, en el orden en que se escribieron las
declaraciones
Ejercicio-> Todos los pares origen-destino?
?- linea(Lo,Eo,_), linea(Ld,Ed,_). ↵
Lo = azul,
Eo = revolucion,
Ld = azul,
Ed = revolucion ;
Lo = azul,
Eo = revolucion,
Ld = azul,
Ed = hidalgo ;
…
● La , coma significa “Y”, esto quiere decir que
ambas afirmaciones tienen que cumplirse
● Prolog buscará todas los posibles valores de
Lo, Eo, Ld y Ed que hagan verdadera la
expresión
● El símbolo _ significa que para esta pregunta,
no importan los números de estación
● Cómo le indicamos a Prolog que los pares
origen-destino no sean la misma estación?
Ejercicio-> Todos los pares origen-destino?
● Evitando pares origen-destino misma estación
?- linea(Lo,Eo,_), linea(Ld,Ed,_), Eo = Ed. ↵
Lo = azul,
Eo = revolucion,
Ld = azul,
Ed = hidalgo ;
…
● Los símbolos = significan distinto que
● Eo = Ed evita las soluciones del tipo:
Lo = azul,
Eo = revolucion,
Ld = azul,
Ed = revolucion
Ejercicio-> Todos los pares origen-destino?
● Pares origen-destino en la misma línea
?- linea(Lo,Eo,_), linea(Ld,Ed,_), Eo = Ed, Lo == Ld. ↵
Lo = azul,
Eo = revolucion,
Ld = azul,
Ed = hidalgo ;
...
● Los símbolos == significan igual que
● Lo == Ld sólo presentará las soluciones
origen-destino de la misma línea
● Lo==Ld, no presenta las soluciones
Lo = azul,
Eo = revolucion,
Ld = verde,
Ed = juarez
Ejercicio-> Todos los pares origen-destino?
● Pares origen-destino en la misma línea e indicando el número de
estaciones entre el origen y el destino
?- linea(Lo,Eo,No), linea(Ld,Ed,Nd), Eo = Ed, Lo == Ld, Ne is Nd-No. ↵
Lo = azul,
Eo = revolucion,
No = 1,
Ld = azul,
Ed = hidalgo,
Nd = 2,
Ne = 1 ;
● “is” es el operador de asignación
● En lenguaje natural Ne is Nd-No,
equivale a Ne=Nd-No
● “Ne” es el número de estaciones entre el
origen y el destino
Ejercicio-> Todas las correspondencias?
● Una correspondencia es una estación común entre dos líneas
?- linea(L1,E,_), linea(L2,E,_), L1 = L2. ↵
L1 = azul,
E = hidalgo,
L2 = verde ;
L1 = azul,
E = bellas_artes,
L2 = gris ;
...
● L1 = L2 equivale a decir líneas distintas
● Una correspondencia sólo se da entre 2 líneas distintas
y E es la estación común.
● Es equivalente la expresión:
linea(L1,E1,_), linea(L2,E2,_),E1==E2,L1=L2.
Ejercicio-> Direcciones
● En pares origen-destino de una misma línea es importante conocer el
sentido
?- linea(L,E1,N1), linea(L,E2,N2), N2 > N1. ↵
L = azul,
E1 = revolucion,
N1 = 1,
E2 = hidalgo,
N2 = 2 ;
...
● La numeración de las estaciones nos da la dirección
● N2 > N1 presenta soluciones ascendentes
● Y según la numeración de las estaciones en la base de
conocimiento, para la línea azul N2 > N1, significa de
revolucion a chabacano
Ejercicio-> Direcciones
● Afirmaciones en sentido inverso, descendente
?- linea(L,E1,N1), linea(L,E2,N2), N2 < N1. ↵
L = azul,
E1 = hidalgo,
N1 = 2,
E2 = revolucion,
N2 = 1 ;
...
● Para indicar el sentido no basta decir
ascendente o descendente
● El sentido se señala en base a las estaciones
terminales, ejemplo linea azul:
Dirección revolucion va hacia el nor-poniente
Dirección chabacano va hacia el sur-oriente
Implementando direcciones
● Agregar a nuestra base de conocimiento las siguientes afirmaciones
terminales(azul,revolucion,chabacano).
terminales(verde,hidalgo,hospital_general).
terminales(rosa,cuauhtemoc,merced).
terminales(gris,bellas_artes,chabacano).
● Agregar las afirmaciones, al final del archivo metro.pl
Ejercicio-> Direcciones
● Las afirmaciones quedan:
?- linea(L,E1,N1), linea(L,E2,N2),
N2 > N1, terminales(L,_,S). ↵
L = azul,
E1 = revolucion,
N1 = 1,
E2 = hidalgo,
N2 = 2,
S = chabacano ;
...
?- linea(L,E1,N1), linea(L,E2,N2),
N2 < N1, terminales(L,S,_). ↵
L = azul,
E1 = hidalgo,
N1 = 2,
E2 = revolucion,
N2 = 1,
S = revolucion ;
...
Definiendo reglas
● Con las afirmaciones de la base de conocimiento podemos establecer
reglas
● En la base de conocimiento, las reglas se van definiendo enseguida de las
afirmaciones
● Agregar las siguientes reglas al final del archivo metro.pl y guardarlo
correspondencia(E,L1,L2) :- linea(L1,E,_), linea(L2,E,_), L1=L2.
direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2),
N2>N1, N is N2 - N1, terminales(L,_,S).
direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2),
N1>N2, N is N1 - N2, terminales(L,S,_).
Conjunción y disyunción
● Las expresiones del tipo “linea(L1,E,_), linea(L2,E,_), L1=L2” separadas
por , forman una conjunción lógica “Y”, cuyo valor es verdad si todas las
afirmaciones son verdaderas
● Una disyunción “O”, puede escribirse usando el operador ; pero en su
lugar se emplea la definición de varias cláusulas para el mismo predicado,
ejemplo:
direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2), N2>N1, N is N2 - N1,
terminales(L,_,S).
O
direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2), N1>N2, N is N1 - N2,
terminales(L,S,_).
Probando reglas
● Entrar al interprete de Prolog y cargar el archivo metro.pl (Load...)
● Afirmar y preguntar a la base de conocimiento:
Estoy en la estación Allende de la línea azul, mi destino es San Antonio
Abad. Cuantas estaciones son y en qué dirección debo ir ?
?- direccion(azul,allende,san_antonio_abad,N_ESTACIONES,DIRECCION). ↵
N_ESTACIONES = 3,
DIRECCION = chabacano ;
NO
?-
Programación interactiva con Prolog
● Los programas interactivos llevan a cabo un diálogo con el usuario
● Prolog cuenta con el predicado “write”
● “write“ toma un término como su argumento y hace que dicho término se
escriba en la terminal del usuario
?- linea(L,allende,_), write(L), write(‘n’). ↵
azul
L = azul
?-
● “write” usa solo un argumento
● Este puede ser una constante o una variable
● Acepta cadenas de texto
● n es salto de línea
Definiendo rutas del metro
● Se tienen los elementos para que Prolog nos de las posibles rutas entre
un par origen-destino
● Existen 3 posibilidades
○ Par origen-destino en la misma línea, por ejemplo juarez-ninos_heroes ambas
estaciones en la línea verde
○ Par origen-destino con una correspondencia, por ejemplo zocalo-obrera en las líneas
azul y gris respectivamente, su correspondencia es la estación bellas_artes
○ Par origen-destino con dos correspondencias, por ejemplo doctores-juarez en las
lineas gris y verde respectivamente, no hay correspondencia directa, pero la línea gris y la
línea verde tienen correspondencia con la línea azul en bellas_artes e hidalgo, además
tienen correspondencia con la línea rosa en isabel_la_catolica y balderas
Regla misma línea origen-destino
● Agregar al final de la base de conocimiento la regla
ruta(DESDE,HASTA) :- direccion(LINEA,DESDE,HASTA,ESTAC,DIREC),
write(‘ Por la linea ‘), write(LINEA),
write(‘ partir de la estacion ‘), write(DESDE),
write(‘ hacia ‘), write(DIREC),
write(‘,en ‘), write(ESTAC), write(‘ estaciones ‘),
write(‘ llegara a la estacion ‘), write(HASTA),
write(‘ de la linea ‘), write(LINEA), write(‘n’).
Probando regla misma línea origen-destino
?- ruta(allende,juarez). ↵
NO
?- ruta(balderas,merced). ↵
Por la linea rosa partir de la estacion balderas hacia merced, en 4 estaciones
llegara a la estacion merced de la linea rosa
SI
?- ruta(obrera,san_juan_letran). ↵
Por la linea gris partir de la estacion obrera hacia bellas_artes, en 3 estaciones
llegara a la estacion san_juan_letran de la linea gris
SI
?-
● No hay solución, son estaciones de líneas distintas
Regla origen-destino con correspondencia
● Agregar al final de la base de conocimiento la regla
ruta(DESDE,HASTA) :- linea(L1,DESDE,_), linea(L2,HASTA,_), L1=L2, DESDE=HASTA,
correspondencia(C,L1,L2), DESDE=C, C=HASTA,
direccion(L1,DESDE,C,EST1,DIR1),
direccion(L2,C,HASTA,EST2,DIR2),
TOTAL is EST1 + EST2,
write(' Por la linea '), write(L1), write(' partir de la estacion '), write(DESDE),
write(' hacia '), write(DIR1), write(', en '), write(EST1), write(' estaciones '),
write('llegara a la correspondencia '), write(C),
write(' para tomar la linea '), write(L2), write(' hacia '), write(DIR2),
write(', en '), write(EST2), write(' estaciones '), write('llegara a la estacion '),
write(HASTA), write(', TOTAL ESTACIONES '), write(TOTAL), write('. n ').
Regla origen-destino con correspondencia
● Comentarios
❏ L1=L2, la línea de la estación origen debe ser distinta a la línea de la estación destino
❏ DESDE=HASTA, la estación origen y destino no deben ser la misma
❏ DESDE=C, C=HASTA, la estación de correspondencia C, entre L1 y L2, no debe ser
el origen, ni el destino
❏ DIR1 y EST1, se evalúan en la regla direccion con DESDE y C como origen-destino
❏ DIR2 y EST2, se evalúan en la regla direccion con C y HASTA como origen-destino
❏ Se podría decir que TOTAL es el valor del recorrido en estaciones
❏ Las sentencias “write” con los textos y las variables, pueden acomodarse en el orden
que se desee
Probando regla con una correspondencia
?- ruta(balderas,bellas_artes). ↵
Por la linea verde partir de la estacion balderas hacia hidalgo, en 2 estaciones llegara a la
correspondencia hidalgo para tomar la linea azul hacia chabacano, en 1 estaciones llegara a la
estacion bellas_artes, TOTAL ESTACIONES 3.
SI ;
Por la linea rosa partir de la estacion balderas hacia merced, en 3 estaciones llegara a la
correspondencia pino_suarez para tomar la linea azul hacia revolucion, en 3 estaciones llegara a la
estacion bellas_artes, TOTAL ESTACIONES 6.
SI ;
Por la linea rosa partir de la estacion balderas hacia merced, en 1 estaciones llegara a la
correspondencia salto_del_agua para tomar la linea gris hacia bellas artes, en 2 estaciones llegara a
la estacion bellas_artes, TOTAL ESTACIONES 3.
● Tres soluciones distintas. El punto y coma ; solicita la siguiente solución válida
Regla origen-destino con 2 correspondencias
ruta(DESDE,HASTA) :- linea(L1,DESDE,_), linea(L2,HASTA,_), L1=L2, DESDE=HASTA,
correspondencia(C1,L1,X), correspondencia(C2,L2,X),
DESDE=C1, C1=HASTA, DESDE=C2, C2=HASTA,
direccion(L1,DESDE,C1,EST1,DIR1), direccion(X,C1,C2,ESTi,DIRi),
direccion(L2,C2,HASTA,EST2,DIR2), TOTAL is EST1 + EST2 + ESTi,
write(' Por la linea '), write(L1), write(' partir de la estacion '), write(DESDE),
write(' hacia '), write(DIR1), write(', en '), write(EST1), write(' estaciones '),
write('llegara a la correspondencia '), write(C1), write(' para tomar la linea '),
write(X), write(' hacia '), write(DIRi), write(', en '), write(ESTi),
write(' estaciones '), write('llegara a la correspondencia '), write(C2),
write(' para tomar la linea '), write(L2), write(' hacia '), write(DIR2),
write(', en '), write(EST2), write(' estaciones '), write('llegara a la estacion '),
write(HASTA), write(', TOTAL ESTACIONES '), write(TOTAL), write('. n ').
Regla origen-destino con 2 correspondencias
● Comentarios
❏ “correspondencia(C1,L1,X), correspondencia(C2,L2,X)”, busca una tercer línea X
común para la línea origen L1 y la línea destino L2, además de las correspondencias
C1 y C2
❏ Las correspondencias, el origen y el destino no deben ser la misma estación
DESDE=HASTA, DESDE=C1, C1=HASTA, DESDE=C2, C2=HASTA
❏ Se necesitan ahora tres direcciones y el número de estaciones entre; DESDE a C1,
C1 a C2 y C2 a HASTA
❏ TOTAL es la suma de las tres anteriores
❏ La respuesta en algunos casos será de más de 3 rutas posibles
Conclusiones
● Demostramos como se puede aplicar Prolog a un
proceso específico, un caso práctico
● Como se habrán dado cuenta, en Prolog no existen
instrucciones de control
● Su ejecución se basa en dos conceptos: la unificación
y el backtracking
● Con la unificación, cada objetivo determina un
subconjunto de cláusulas susceptibles de ser
ejecutadas, cada una de ellas se denomina punto de
elección
Conclusiones
● Prolog selecciona el primer punto de elección y sigue
ejecutando el programa hasta determinar si el objetivo
es verdadero o falso
● En caso de ser falso entra en juego el backtracking, que
consiste en deshacer todo lo ejecutado situando el
programa en el mismo estado en el que estaba justo
antes de llegar al punto de elección
● Entonces se toma el siguiente punto de elección que
estaba pendiente y se repite de nuevo el proceso

Más contenido relacionado

La actualidad más candente

141553391 lenguaje-hdl
141553391 lenguaje-hdl141553391 lenguaje-hdl
141553391 lenguaje-hdl
Daniel Perez
 
02 cuestionario fundamentos de computación gs3
02 cuestionario fundamentos de computación gs302 cuestionario fundamentos de computación gs3
02 cuestionario fundamentos de computación gs3
slzp2708
 
Fundamentos de algoritmia
Fundamentos de algoritmiaFundamentos de algoritmia
Fundamentos de algoritmia
Nilson Negrete
 
Modelado funcional casos de uso
Modelado funcional casos de usoModelado funcional casos de uso
Modelado funcional casos de uso
Robert Rodriguez
 
Prueba de poker simulacion DFD
Prueba de poker simulacion DFDPrueba de poker simulacion DFD
Prueba de poker simulacion DFD
Vitto Alcantara
 
Analisis lexico automatas i
Analisis lexico automatas iAnalisis lexico automatas i
Analisis lexico automatas i
rubiyanetvalenciavelazquez
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador
ADOLFOISAIASGARCIASI
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
Silvestre Sosa
 
Unidad 2 arquitectura del computador
Unidad 2 arquitectura del computadorUnidad 2 arquitectura del computador
Unidad 2 arquitectura del computador
Cristhixn Leon
 
Sistemas de Razonamiento Lógico
Sistemas de Razonamiento LógicoSistemas de Razonamiento Lógico
Sistemas de Razonamiento Lógico
Jonathan Muñoz Aleman
 
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
José Antonio Sandoval Acosta
 
Glosario de ing. de software
Glosario de ing. de softwareGlosario de ing. de software
Glosario de ing. de software
George Corona
 
Presentacion algoritmos
Presentacion algoritmosPresentacion algoritmos
Presentacion algoritmos
aralylopez88
 
mikroplan para PLC Arduino
mikroplan para PLC Arduinomikroplan para PLC Arduino
mikroplan para PLC Arduino
SANTIAGO PABLO ALBERTO
 
Unidad 1 (1.3) Fundamentos de ingeniería de software
Unidad 1 (1.3) Fundamentos de ingeniería de software Unidad 1 (1.3) Fundamentos de ingeniería de software
Unidad 1 (1.3) Fundamentos de ingeniería de software
Selins Cassiel
 
Fundamentos de la arquitectura del software
Fundamentos de la arquitectura del softwareFundamentos de la arquitectura del software
Fundamentos de la arquitectura del software
Ender Christense
 
El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC
SANTIAGO PABLO ALBERTO
 
Multiplexores.
Multiplexores.Multiplexores.
Multiplexores.
Rennytox Hernandez
 
Unidad No. 5 - Agentes Inteligentes
Unidad No. 5 - Agentes InteligentesUnidad No. 5 - Agentes Inteligentes
Unidad No. 5 - Agentes Inteligentes
Milton Klapp
 
Microcontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMELMicrocontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMEL
SANTIAGO PABLO ALBERTO
 

La actualidad más candente (20)

141553391 lenguaje-hdl
141553391 lenguaje-hdl141553391 lenguaje-hdl
141553391 lenguaje-hdl
 
02 cuestionario fundamentos de computación gs3
02 cuestionario fundamentos de computación gs302 cuestionario fundamentos de computación gs3
02 cuestionario fundamentos de computación gs3
 
Fundamentos de algoritmia
Fundamentos de algoritmiaFundamentos de algoritmia
Fundamentos de algoritmia
 
Modelado funcional casos de uso
Modelado funcional casos de usoModelado funcional casos de uso
Modelado funcional casos de uso
 
Prueba de poker simulacion DFD
Prueba de poker simulacion DFDPrueba de poker simulacion DFD
Prueba de poker simulacion DFD
 
Analisis lexico automatas i
Analisis lexico automatas iAnalisis lexico automatas i
Analisis lexico automatas i
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
Unidad 2 arquitectura del computador
Unidad 2 arquitectura del computadorUnidad 2 arquitectura del computador
Unidad 2 arquitectura del computador
 
Sistemas de Razonamiento Lógico
Sistemas de Razonamiento LógicoSistemas de Razonamiento Lógico
Sistemas de Razonamiento Lógico
 
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
 
Glosario de ing. de software
Glosario de ing. de softwareGlosario de ing. de software
Glosario de ing. de software
 
Presentacion algoritmos
Presentacion algoritmosPresentacion algoritmos
Presentacion algoritmos
 
mikroplan para PLC Arduino
mikroplan para PLC Arduinomikroplan para PLC Arduino
mikroplan para PLC Arduino
 
Unidad 1 (1.3) Fundamentos de ingeniería de software
Unidad 1 (1.3) Fundamentos de ingeniería de software Unidad 1 (1.3) Fundamentos de ingeniería de software
Unidad 1 (1.3) Fundamentos de ingeniería de software
 
Fundamentos de la arquitectura del software
Fundamentos de la arquitectura del softwareFundamentos de la arquitectura del software
Fundamentos de la arquitectura del software
 
El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC
 
Multiplexores.
Multiplexores.Multiplexores.
Multiplexores.
 
Unidad No. 5 - Agentes Inteligentes
Unidad No. 5 - Agentes InteligentesUnidad No. 5 - Agentes Inteligentes
Unidad No. 5 - Agentes Inteligentes
 
Microcontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMELMicrocontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMEL
 

Similar a Programación Lógica con PROLOG

Sesión 3 - Introducción a la Investigación de Operaciones.pdf
Sesión 3 - Introducción a la Investigación de Operaciones.pdfSesión 3 - Introducción a la Investigación de Operaciones.pdf
Sesión 3 - Introducción a la Investigación de Operaciones.pdf
Wilfrido34
 
Fundamentos de programación I.pptx
Fundamentos de programación I.pptxFundamentos de programación I.pptx
Fundamentos de programación I.pptx
benjamincordero6
 
Dol excel
Dol  excelDol  excel
Programacion en matlab
Programacion en matlabProgramacion en matlab
Programacion en matlab
Nicolas Pinilla
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
marimar79
 
conceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdfconceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdf
carlosquiza2
 
Micro clase
Micro claseMicro clase
Micro clase
figueroma
 
resolucion de ecuaciones diferenciales con MATLAB
resolucion de ecuaciones diferenciales con MATLAB resolucion de ecuaciones diferenciales con MATLAB
resolucion de ecuaciones diferenciales con MATLAB
Raul Ibañez
 
Gramáticas formales
Gramáticas formales Gramáticas formales
Gramáticas formales
Astrid Rodriguez
 
Teoría de la programación.pptx
Teoría de la programación.pptxTeoría de la programación.pptx
Teoría de la programación.pptx
Raúl Monroy Pamplona
 
Programacion grado 10
Programacion grado 10Programacion grado 10
Programacion grado 10
Ruth Guerrero
 
Introducción a la Programación
Introducción a la ProgramaciónIntroducción a la Programación
Introducción a la Programación
Jeckson Loza
 
Presentación4
Presentación4Presentación4
Presentación4
AndreaPaz124
 
Arreglos
ArreglosArreglos
Arreglos
johanna20
 
Gramaticas
GramaticasGramaticas
Gramaticas
pastoral juvenil
 
Gramaticas
GramaticasGramaticas
Gramaticas
pastoral juvenil
 
Asa
AsaAsa
4ta tarea de sistemas expertos
4ta tarea de sistemas expertos4ta tarea de sistemas expertos
4ta tarea de sistemas expertos
ynina
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
starduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
starduslex
 

Similar a Programación Lógica con PROLOG (20)

Sesión 3 - Introducción a la Investigación de Operaciones.pdf
Sesión 3 - Introducción a la Investigación de Operaciones.pdfSesión 3 - Introducción a la Investigación de Operaciones.pdf
Sesión 3 - Introducción a la Investigación de Operaciones.pdf
 
Fundamentos de programación I.pptx
Fundamentos de programación I.pptxFundamentos de programación I.pptx
Fundamentos de programación I.pptx
 
Dol excel
Dol  excelDol  excel
Dol excel
 
Programacion en matlab
Programacion en matlabProgramacion en matlab
Programacion en matlab
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
conceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdfconceptos basicos lenguajes de programacion.pdf
conceptos basicos lenguajes de programacion.pdf
 
Micro clase
Micro claseMicro clase
Micro clase
 
resolucion de ecuaciones diferenciales con MATLAB
resolucion de ecuaciones diferenciales con MATLAB resolucion de ecuaciones diferenciales con MATLAB
resolucion de ecuaciones diferenciales con MATLAB
 
Gramáticas formales
Gramáticas formales Gramáticas formales
Gramáticas formales
 
Teoría de la programación.pptx
Teoría de la programación.pptxTeoría de la programación.pptx
Teoría de la programación.pptx
 
Programacion grado 10
Programacion grado 10Programacion grado 10
Programacion grado 10
 
Introducción a la Programación
Introducción a la ProgramaciónIntroducción a la Programación
Introducción a la Programación
 
Presentación4
Presentación4Presentación4
Presentación4
 
Arreglos
ArreglosArreglos
Arreglos
 
Gramaticas
GramaticasGramaticas
Gramaticas
 
Gramaticas
GramaticasGramaticas
Gramaticas
 
Asa
AsaAsa
Asa
 
4ta tarea de sistemas expertos
4ta tarea de sistemas expertos4ta tarea de sistemas expertos
4ta tarea de sistemas expertos
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 

Más de Daniel Cruz

Desarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nubeDesarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nube
Daniel Cruz
 
Aprendiendo SQL 2
Aprendiendo SQL 2 Aprendiendo SQL 2
Aprendiendo SQL 2
Daniel Cruz
 
Proyecto ipython - Oracle - Excel
Proyecto ipython -  Oracle - ExcelProyecto ipython -  Oracle - Excel
Proyecto ipython - Oracle - Excel
Daniel Cruz
 
Chipkit comunicacion puerto serie
Chipkit comunicacion puerto serieChipkit comunicacion puerto serie
Chipkit comunicacion puerto serie
Daniel Cruz
 
Arduino entorno desarrollo
Arduino entorno desarrolloArduino entorno desarrollo
Arduino entorno desarrollo
Daniel Cruz
 
Curso básico de introducción
Curso básico de introducciónCurso básico de introducción
Curso básico de introducción
Daniel Cruz
 
Manejo Roles Linux
Manejo Roles LinuxManejo Roles Linux
Manejo Roles Linux
Daniel Cruz
 
Redes Rpc
Redes RpcRedes Rpc
Redes Rpc
Daniel Cruz
 
Sq Lv1a
Sq Lv1aSq Lv1a
Sq Lv1a
Daniel Cruz
 

Más de Daniel Cruz (9)

Desarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nubeDesarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nube
 
Aprendiendo SQL 2
Aprendiendo SQL 2 Aprendiendo SQL 2
Aprendiendo SQL 2
 
Proyecto ipython - Oracle - Excel
Proyecto ipython -  Oracle - ExcelProyecto ipython -  Oracle - Excel
Proyecto ipython - Oracle - Excel
 
Chipkit comunicacion puerto serie
Chipkit comunicacion puerto serieChipkit comunicacion puerto serie
Chipkit comunicacion puerto serie
 
Arduino entorno desarrollo
Arduino entorno desarrolloArduino entorno desarrollo
Arduino entorno desarrollo
 
Curso básico de introducción
Curso básico de introducciónCurso básico de introducción
Curso básico de introducción
 
Manejo Roles Linux
Manejo Roles LinuxManejo Roles Linux
Manejo Roles Linux
 
Redes Rpc
Redes RpcRedes Rpc
Redes Rpc
 
Sq Lv1a
Sq Lv1aSq Lv1a
Sq Lv1a
 

Último

primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
eliersin13
 
Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
AlanL15
 
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
JhenryHuisa1
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
holabuscafiesta
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
KatiuskaDominguez2
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
AbbieDominguezGirond
 

Último (6)

primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
 
Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
 
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
 

Programación Lógica con PROLOG

  • 2. Descargar de Play Store ● Jekejeke Prolog Runtime de XLOG Technologies ○ Es el intérprete del lenguaje, ver video que viene con la descarga ○ Emplearemos frecuentemente las opciones de su menu; Close, New y Load ● Gestor de Archivos HD de Cheetah Mobile ○ Es un administrador de archivos, nos ayudará a crear bases de conocimiento en archivos de texto
  • 3. Ejemplo líneas del Metro ● Modelo de la CD de México recortado a primer cuadro ● 4 líneas ● 25 estaciones ● 6 correspondencias ● En Prolog haremos una base de conocimiento ● Responderá a preguntas sobre posibles rutas origen- destino
  • 4. Declaraciones afirmativas ● La programación lógica permite formalizar hechos, ejemplo: “Hidalgo es una estación del metro” “Allende es una estación de la línea azul del metro” ● En Prolog estas afirmaciones se representan: estacion_metro(hidalgo). linea(azul,allende).
  • 5. Requisitos de sintaxis de las declaraciones ● No se utilizan mayúsculas ● Las declaraciones tienen dos partes ○ Predicado del lado izquierdo ○ Argumentos del lado derecho entre paréntesis ● Cada afirmación termina con un punto ● El nombre de un predicado compuesto puede usar el símbolo de subrayado, no se permiten espacios ni guiones
  • 6. ● La programación lógica también formaliza reglas o restricciones, ejemplo: “Una correspondencia se da entre dos líneas; la estación común tiene el mismo nombre en ambas líneas" En Prolog esta aseveración se representa: correspondencia(E,L1,L2) :- linea(L1,E), linea(L2,E). Planteamiento de reglas
  • 7. Observaciones de la sintaxis ● Las reglas requieren de variables L1,L2,E ● Las variables se representan en mayúsculas ● Las mismas variables deben aparecer en ambos lados de la regla ● Las dos partes de la regla se separan por :- que es el símbolo de inferencia ● La regla debe terminar con punto ● La coma , significa “Y”
  • 8. Base de conocimiento ● Es un conjunto de afirmaciones y reglas ● Se almacenan en archivos de texto ● El intérprete Prolog consulta la base de conocimiento para responder a preguntas concretas, ejemplo: ? - linea(verde, allende). ↵ No ¿Allende es una estación de la línea verde del metro?
  • 9. Crear base de conocimiento en el móvil ● Ejecutar el gestor de archivos File Manager ● Crear un directorio de trabajo de preferencia en la tarjeta SD ● En el directorio de trabajo crear un archivo de texto con la extensión .pl ● Escribir las afirmaciones de la base de conocimiento ● % al inicio de cada línea se tomará como un comentario ● No olvidar el punto al final de cada declaración ● Guardar el archivo de texto
  • 10. Crear base de conocimiento en el móvil
  • 11. Base de conocimiento, archivo metro.pl ● A nuestras afirmaciones les damos la forma: linea(color, nombre_estacion, numero_estacion). linea(azul,revolucion,1). linea(azul,hidalgo,2). ... linea(verde,hidalgo,1). linea(verde,juarez,2). …. linea(rosa,cuauhtemoc,1). linea(rosa,balderas,2). …. linea(gris,chabacano,6).
  • 12. Cargar base conocimiento en Prolog ● Ejecutar Jekejeke Prolog ● Tomar la opción Load… ● Localizar directorio de trabajo y la base de conocimiento, archivo .pl ● Si no hay mensaje de error, iniciar interrogatorio ● En caso de error ir a File Manager, abrir el archivo .pl, corregirlo y guardarlo ● Volver a cargar con la opción Load… ● La opción New… da una nueva pantalla
  • 13. Cargar base de conocimiento
  • 14. Interrogando la base de conocimiento ● allende es una estación de la línea verde? ?- linea(verde,allende,_). ↵ NO ?- ● Las preguntas se escriben en el mismo formato que las afirmaciones ● Las respuestas son solo “SI” o “NO” ● Argumentos en minúsculas son constantes ● El símbolo _ en la pregunta, es una variable en blanco, su significado en esta pregunta es; “no me interesa el número de estación”
  • 15. Interrogando la base de conocimiento ● Todas las estaciones de la línea verde? ?- linea(verde,ESTACION,_). ↵ ESTACION = hidalgo ; ESTACION = juarez ; ESTACION = balderas ; ESTACION = ninos_heroes ; ESTACION = hospital_general ; ?- ● Argumentos con mayúscula inicial son variables ● Con “verde” estamos afirmando una parte ● Cuando se emplean variables como ESTACION, no se está pidiendo a Prolog que confirme o niegue sino que encuentre información ● El intérprete debe encontrar un valor para ESTACION que haga verdadera la pregunta ● Si existe más de un valor se teclea ; para solicitar otra solución
  • 16. Variables en las preguntas ● Al usar variables, Prolog presenta “TODAS LAS SOLUCIONES POSIBLES”
  • 17. Interrogando la base de conocimiento ● Todas las estaciones del metro ? punto y ↵ punto y coma Continua hasta que se agotan todas las posibilidades
  • 18. Interrogando la base de conocimiento ● Con el uso de variables Prolog busca soluciones ● Lo anterior es posible porque la base de conocimiento tiene afirmaciones reales que permiten generar soluciones ● En la base de conocimiento se busca de “arriba a abajo”, en el orden en que se escribieron las declaraciones
  • 19. Ejercicio-> Todos los pares origen-destino? ?- linea(Lo,Eo,_), linea(Ld,Ed,_). ↵ Lo = azul, Eo = revolucion, Ld = azul, Ed = revolucion ; Lo = azul, Eo = revolucion, Ld = azul, Ed = hidalgo ; … ● La , coma significa “Y”, esto quiere decir que ambas afirmaciones tienen que cumplirse ● Prolog buscará todas los posibles valores de Lo, Eo, Ld y Ed que hagan verdadera la expresión ● El símbolo _ significa que para esta pregunta, no importan los números de estación ● Cómo le indicamos a Prolog que los pares origen-destino no sean la misma estación?
  • 20. Ejercicio-> Todos los pares origen-destino? ● Evitando pares origen-destino misma estación ?- linea(Lo,Eo,_), linea(Ld,Ed,_), Eo = Ed. ↵ Lo = azul, Eo = revolucion, Ld = azul, Ed = hidalgo ; … ● Los símbolos = significan distinto que ● Eo = Ed evita las soluciones del tipo: Lo = azul, Eo = revolucion, Ld = azul, Ed = revolucion
  • 21. Ejercicio-> Todos los pares origen-destino? ● Pares origen-destino en la misma línea ?- linea(Lo,Eo,_), linea(Ld,Ed,_), Eo = Ed, Lo == Ld. ↵ Lo = azul, Eo = revolucion, Ld = azul, Ed = hidalgo ; ... ● Los símbolos == significan igual que ● Lo == Ld sólo presentará las soluciones origen-destino de la misma línea ● Lo==Ld, no presenta las soluciones Lo = azul, Eo = revolucion, Ld = verde, Ed = juarez
  • 22. Ejercicio-> Todos los pares origen-destino? ● Pares origen-destino en la misma línea e indicando el número de estaciones entre el origen y el destino ?- linea(Lo,Eo,No), linea(Ld,Ed,Nd), Eo = Ed, Lo == Ld, Ne is Nd-No. ↵ Lo = azul, Eo = revolucion, No = 1, Ld = azul, Ed = hidalgo, Nd = 2, Ne = 1 ; ● “is” es el operador de asignación ● En lenguaje natural Ne is Nd-No, equivale a Ne=Nd-No ● “Ne” es el número de estaciones entre el origen y el destino
  • 23. Ejercicio-> Todas las correspondencias? ● Una correspondencia es una estación común entre dos líneas ?- linea(L1,E,_), linea(L2,E,_), L1 = L2. ↵ L1 = azul, E = hidalgo, L2 = verde ; L1 = azul, E = bellas_artes, L2 = gris ; ... ● L1 = L2 equivale a decir líneas distintas ● Una correspondencia sólo se da entre 2 líneas distintas y E es la estación común. ● Es equivalente la expresión: linea(L1,E1,_), linea(L2,E2,_),E1==E2,L1=L2.
  • 24. Ejercicio-> Direcciones ● En pares origen-destino de una misma línea es importante conocer el sentido ?- linea(L,E1,N1), linea(L,E2,N2), N2 > N1. ↵ L = azul, E1 = revolucion, N1 = 1, E2 = hidalgo, N2 = 2 ; ... ● La numeración de las estaciones nos da la dirección ● N2 > N1 presenta soluciones ascendentes ● Y según la numeración de las estaciones en la base de conocimiento, para la línea azul N2 > N1, significa de revolucion a chabacano
  • 25. Ejercicio-> Direcciones ● Afirmaciones en sentido inverso, descendente ?- linea(L,E1,N1), linea(L,E2,N2), N2 < N1. ↵ L = azul, E1 = hidalgo, N1 = 2, E2 = revolucion, N2 = 1 ; ... ● Para indicar el sentido no basta decir ascendente o descendente ● El sentido se señala en base a las estaciones terminales, ejemplo linea azul: Dirección revolucion va hacia el nor-poniente Dirección chabacano va hacia el sur-oriente
  • 26. Implementando direcciones ● Agregar a nuestra base de conocimiento las siguientes afirmaciones terminales(azul,revolucion,chabacano). terminales(verde,hidalgo,hospital_general). terminales(rosa,cuauhtemoc,merced). terminales(gris,bellas_artes,chabacano). ● Agregar las afirmaciones, al final del archivo metro.pl
  • 27. Ejercicio-> Direcciones ● Las afirmaciones quedan: ?- linea(L,E1,N1), linea(L,E2,N2), N2 > N1, terminales(L,_,S). ↵ L = azul, E1 = revolucion, N1 = 1, E2 = hidalgo, N2 = 2, S = chabacano ; ... ?- linea(L,E1,N1), linea(L,E2,N2), N2 < N1, terminales(L,S,_). ↵ L = azul, E1 = hidalgo, N1 = 2, E2 = revolucion, N2 = 1, S = revolucion ; ...
  • 28. Definiendo reglas ● Con las afirmaciones de la base de conocimiento podemos establecer reglas ● En la base de conocimiento, las reglas se van definiendo enseguida de las afirmaciones ● Agregar las siguientes reglas al final del archivo metro.pl y guardarlo correspondencia(E,L1,L2) :- linea(L1,E,_), linea(L2,E,_), L1=L2. direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2), N2>N1, N is N2 - N1, terminales(L,_,S). direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2), N1>N2, N is N1 - N2, terminales(L,S,_).
  • 29. Conjunción y disyunción ● Las expresiones del tipo “linea(L1,E,_), linea(L2,E,_), L1=L2” separadas por , forman una conjunción lógica “Y”, cuyo valor es verdad si todas las afirmaciones son verdaderas ● Una disyunción “O”, puede escribirse usando el operador ; pero en su lugar se emplea la definición de varias cláusulas para el mismo predicado, ejemplo: direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2), N2>N1, N is N2 - N1, terminales(L,_,S). O direccion(L,E1,E2,N,S) :- linea(L,E1,N1), linea(L,E2,N2), N1>N2, N is N1 - N2, terminales(L,S,_).
  • 30. Probando reglas ● Entrar al interprete de Prolog y cargar el archivo metro.pl (Load...) ● Afirmar y preguntar a la base de conocimiento: Estoy en la estación Allende de la línea azul, mi destino es San Antonio Abad. Cuantas estaciones son y en qué dirección debo ir ? ?- direccion(azul,allende,san_antonio_abad,N_ESTACIONES,DIRECCION). ↵ N_ESTACIONES = 3, DIRECCION = chabacano ; NO ?-
  • 31. Programación interactiva con Prolog ● Los programas interactivos llevan a cabo un diálogo con el usuario ● Prolog cuenta con el predicado “write” ● “write“ toma un término como su argumento y hace que dicho término se escriba en la terminal del usuario ?- linea(L,allende,_), write(L), write(‘n’). ↵ azul L = azul ?- ● “write” usa solo un argumento ● Este puede ser una constante o una variable ● Acepta cadenas de texto ● n es salto de línea
  • 32. Definiendo rutas del metro ● Se tienen los elementos para que Prolog nos de las posibles rutas entre un par origen-destino ● Existen 3 posibilidades ○ Par origen-destino en la misma línea, por ejemplo juarez-ninos_heroes ambas estaciones en la línea verde ○ Par origen-destino con una correspondencia, por ejemplo zocalo-obrera en las líneas azul y gris respectivamente, su correspondencia es la estación bellas_artes ○ Par origen-destino con dos correspondencias, por ejemplo doctores-juarez en las lineas gris y verde respectivamente, no hay correspondencia directa, pero la línea gris y la línea verde tienen correspondencia con la línea azul en bellas_artes e hidalgo, además tienen correspondencia con la línea rosa en isabel_la_catolica y balderas
  • 33. Regla misma línea origen-destino ● Agregar al final de la base de conocimiento la regla ruta(DESDE,HASTA) :- direccion(LINEA,DESDE,HASTA,ESTAC,DIREC), write(‘ Por la linea ‘), write(LINEA), write(‘ partir de la estacion ‘), write(DESDE), write(‘ hacia ‘), write(DIREC), write(‘,en ‘), write(ESTAC), write(‘ estaciones ‘), write(‘ llegara a la estacion ‘), write(HASTA), write(‘ de la linea ‘), write(LINEA), write(‘n’).
  • 34. Probando regla misma línea origen-destino ?- ruta(allende,juarez). ↵ NO ?- ruta(balderas,merced). ↵ Por la linea rosa partir de la estacion balderas hacia merced, en 4 estaciones llegara a la estacion merced de la linea rosa SI ?- ruta(obrera,san_juan_letran). ↵ Por la linea gris partir de la estacion obrera hacia bellas_artes, en 3 estaciones llegara a la estacion san_juan_letran de la linea gris SI ?- ● No hay solución, son estaciones de líneas distintas
  • 35. Regla origen-destino con correspondencia ● Agregar al final de la base de conocimiento la regla ruta(DESDE,HASTA) :- linea(L1,DESDE,_), linea(L2,HASTA,_), L1=L2, DESDE=HASTA, correspondencia(C,L1,L2), DESDE=C, C=HASTA, direccion(L1,DESDE,C,EST1,DIR1), direccion(L2,C,HASTA,EST2,DIR2), TOTAL is EST1 + EST2, write(' Por la linea '), write(L1), write(' partir de la estacion '), write(DESDE), write(' hacia '), write(DIR1), write(', en '), write(EST1), write(' estaciones '), write('llegara a la correspondencia '), write(C), write(' para tomar la linea '), write(L2), write(' hacia '), write(DIR2), write(', en '), write(EST2), write(' estaciones '), write('llegara a la estacion '), write(HASTA), write(', TOTAL ESTACIONES '), write(TOTAL), write('. n ').
  • 36. Regla origen-destino con correspondencia ● Comentarios ❏ L1=L2, la línea de la estación origen debe ser distinta a la línea de la estación destino ❏ DESDE=HASTA, la estación origen y destino no deben ser la misma ❏ DESDE=C, C=HASTA, la estación de correspondencia C, entre L1 y L2, no debe ser el origen, ni el destino ❏ DIR1 y EST1, se evalúan en la regla direccion con DESDE y C como origen-destino ❏ DIR2 y EST2, se evalúan en la regla direccion con C y HASTA como origen-destino ❏ Se podría decir que TOTAL es el valor del recorrido en estaciones ❏ Las sentencias “write” con los textos y las variables, pueden acomodarse en el orden que se desee
  • 37. Probando regla con una correspondencia ?- ruta(balderas,bellas_artes). ↵ Por la linea verde partir de la estacion balderas hacia hidalgo, en 2 estaciones llegara a la correspondencia hidalgo para tomar la linea azul hacia chabacano, en 1 estaciones llegara a la estacion bellas_artes, TOTAL ESTACIONES 3. SI ; Por la linea rosa partir de la estacion balderas hacia merced, en 3 estaciones llegara a la correspondencia pino_suarez para tomar la linea azul hacia revolucion, en 3 estaciones llegara a la estacion bellas_artes, TOTAL ESTACIONES 6. SI ; Por la linea rosa partir de la estacion balderas hacia merced, en 1 estaciones llegara a la correspondencia salto_del_agua para tomar la linea gris hacia bellas artes, en 2 estaciones llegara a la estacion bellas_artes, TOTAL ESTACIONES 3. ● Tres soluciones distintas. El punto y coma ; solicita la siguiente solución válida
  • 38. Regla origen-destino con 2 correspondencias ruta(DESDE,HASTA) :- linea(L1,DESDE,_), linea(L2,HASTA,_), L1=L2, DESDE=HASTA, correspondencia(C1,L1,X), correspondencia(C2,L2,X), DESDE=C1, C1=HASTA, DESDE=C2, C2=HASTA, direccion(L1,DESDE,C1,EST1,DIR1), direccion(X,C1,C2,ESTi,DIRi), direccion(L2,C2,HASTA,EST2,DIR2), TOTAL is EST1 + EST2 + ESTi, write(' Por la linea '), write(L1), write(' partir de la estacion '), write(DESDE), write(' hacia '), write(DIR1), write(', en '), write(EST1), write(' estaciones '), write('llegara a la correspondencia '), write(C1), write(' para tomar la linea '), write(X), write(' hacia '), write(DIRi), write(', en '), write(ESTi), write(' estaciones '), write('llegara a la correspondencia '), write(C2), write(' para tomar la linea '), write(L2), write(' hacia '), write(DIR2), write(', en '), write(EST2), write(' estaciones '), write('llegara a la estacion '), write(HASTA), write(', TOTAL ESTACIONES '), write(TOTAL), write('. n ').
  • 39. Regla origen-destino con 2 correspondencias ● Comentarios ❏ “correspondencia(C1,L1,X), correspondencia(C2,L2,X)”, busca una tercer línea X común para la línea origen L1 y la línea destino L2, además de las correspondencias C1 y C2 ❏ Las correspondencias, el origen y el destino no deben ser la misma estación DESDE=HASTA, DESDE=C1, C1=HASTA, DESDE=C2, C2=HASTA ❏ Se necesitan ahora tres direcciones y el número de estaciones entre; DESDE a C1, C1 a C2 y C2 a HASTA ❏ TOTAL es la suma de las tres anteriores ❏ La respuesta en algunos casos será de más de 3 rutas posibles
  • 40. Conclusiones ● Demostramos como se puede aplicar Prolog a un proceso específico, un caso práctico ● Como se habrán dado cuenta, en Prolog no existen instrucciones de control ● Su ejecución se basa en dos conceptos: la unificación y el backtracking ● Con la unificación, cada objetivo determina un subconjunto de cláusulas susceptibles de ser ejecutadas, cada una de ellas se denomina punto de elección
  • 41. Conclusiones ● Prolog selecciona el primer punto de elección y sigue ejecutando el programa hasta determinar si el objetivo es verdadero o falso ● En caso de ser falso entra en juego el backtracking, que consiste en deshacer todo lo ejecutado situando el programa en el mismo estado en el que estaba justo antes de llegar al punto de elección ● Entonces se toma el siguiente punto de elección que estaba pendiente y se repite de nuevo el proceso