SlideShare a Scribd company logo
1 of 42
Download to read offline
Práctica I
Prolog I: Elementos básicos de Prolog
Contenidos
 Cláusulas de Prolog.
 Estructuras, operadores e igualdad.
 Listas y recursión.
 Satisfacción de objetivos.
 Predicado corte.
2
Cláusulas de Prolog
3
Prolog y Programación Lógica
 Prolog: inplementeción secuencial del modelo del
Programa Normal
 Programa Prolog: Conjunto de Cláusulas Horn
 Ejecución: inferencia lógica (busqueda)
 Como inferencia: Resolución SLDNF
 Cómo búsqueda: primero en profundidad, resolviendo
primero con el primer literal a la izquerda
 El orden de las cláusulas es relevante
 Elementos extra-lógicos: clausulas ejecutable,
alteración del flujo de control, entre otras.
4
Cláusulas de Prolog: Hechos
 Describen una propiedades de objetos
 Ejemplo: el diamante es valioso
 Hecho:
valioso(diamante).
 El programador debe definir la interpretación de los
objetos y las relaciones entre ellos:
 Objetos: juan, libro
 Relación:
tiene(juan, libro)
 El orden de la relación es importante
5
Cláusulas de Prolog: Reglas
 Establecen dependencias entre hechos
 Estructura de una regla
<cabeza> :- <cuerpo>
<cabeza>  relación con variables
<cuerpo>  conjunción de relaciones con variables
 Ejemplo:
abueloPaterno(X, Z):-padre(X,Y), padre(Y, Z)
 Variables: X, Y, Z (palabras que empiezan por mayúscula o
guion bajo: “_”)
 Conjunción: “,”
6
Cláusulas de Prolog: consultas I
 Comienzan por:
?-
 Equivale a preguntar: “¿la consulta se deduce de la
base de conocimiento (hechos + reglas)?”
 Ante una consulta, PROLOG intenta hacer un matching
sobre la base de conocimiento:
 Mismo predicado
 Mismo número de argumentos
 Mismos argumentos: términos / variables (instanciadas)
7
Cláusulas de Prolog: consultas II
 Las respuestas a una consulta pueden ser:
 Yes Se deduce de la BC
 No No se deduce
 ¿Qué responder a una consulta?
 [ENTER]  Termina
 ;  ¿Hay más respuestas?
8
Base de conocimiento Consultas Respuestas
le_gusta_a(jose, maria).
le_gusta_a(maria, libro).
le_gusta_a(juan, coche).
le_gusta_a(jose, pescado).
?- le_gusta_a(maria,jose). No
?- le_gusta_a(maria, libro). Yes
?- le_gusta_a(juan, pescado). No
?- le_gusta_a(jose, pescado). Yes
Un programa ejemplo
/* Ejemplo1_0. pl  Los comentarios como en C */
/* Hechos: le_gusta_a(A,B) --> a A le_gusta B */
le_gusta_a(juan, maria).
le_gusta_a(pedro, coche).
le_gusta_a(maria, libro).
le_gusta_a(maria, juan).
le_gusta_a(jose, maria).
le_gusta_a(jose, coche).
le_gusta_a(jose, pescado).
/* Reglas: es_amigo_de (juan, Persona) --> juan es amigo de
Persona si a Persona le gustan los coches */
es_amigo_de(juan,X):- le_gusta_a(X, coche).
9
Ejercicio Cláusulas de Prolog
1. Elaborar una programa Prolog que describa a las
personas de su familia, sujeto a:
1. Hechos. El programa debe de incluir la siguiente
información mediante hechos:
1. Hombres y mujeres que la componen: hombre(X), mujer(X)
2. La relación de parentesco más sencilla: es_ hijo_de(X,Y)
2. Reglas. Que permitan saber
1. quién es abuelo/a de quién,
2. quién es padre/madre,
3. quién es hermana/hermano.
3. No se permite el uso de operadores en las reglas.
4. Realizar la consulta ?-hermano(X,Y) y analizar el
resultado.
10
Estructuras, operadores e igualdad
11
Estructuras
 Sintaxis: functor(comp#1, comp#2,... …,comp#n).
 En general, functor es un nombre que designa:
 un hecho,
 una relación,
 una función
 A su vez, comp#i, puede ser un functor
 Ejemplo:
curso-27(titulacion(“Grado en Informática”),
materia(sistemas_inteligentes)).
 Incluso las cláusulas se representan como functores:
?- clause(X, Y). /* Se satisface con clausulas de cabeza X y
cuerpo Y */
12
Operadores aritméticos básicos
 +, -, *, y /.
 Todos infijo
 Como cualquier otra estructura
 Evaluación: is
 ?- X is 2 + 2.
 ?- X is +(2,2).
 ?- 4 is +(2,2).
13
Igualdad y Desigualdad I
 El predicado igualdad, =, está predefinido:
 ?- X = Y.
PROLOG, para satisfacer el objetivo, comprueba si ambas
pueden ligarse al mismo objeto.
 Reglas para decidir si X e Y son “iguales”:
 Si X no está instanciada e Y sí, entonces son iguales y X
toma como valor el término al que estuviese instanciado
Y.
 Los números y los átomos siempre son iguales entre sí.
 Dos estructuras son iguales si tienen el mismo functor y
el mismo número de argumentos, y cada uno de esos
argumentos son iguales.
14
Ejemplos igualdad
15
consulta respuesta
?- mesa=mesa. Yes
?- silla = silla. Yes
?- mesa = silla. No
?- 2010 = 2009. No
curso-27(X, materia(Y))=curso-
27(titulacion(“Grado en Informática”),
materia(sistemas_inteligentes)).
X=(titulacion(“Grado en
Informática”)
Y=sistemas_inteligentes
curso-27(_, materia(Y))=curso-
27(titulacion(“Grado en Informática”),
materia(sistemas_inteligentes)).
Y=sistemas_inteligentes
Igualdad y Desigualdad II
 Reglas para decidir si X e Y son “iguales”:
 Si las 2 variables no están instanciadas, se cumple la
igualdad y pasan a ser variables compartidas.
 ?- X = Y.
(Cuando una de ellas quede instanciada, fijará el valor de la
otra.)
No tiene interés de forma aislada, pero:
 ?- X=Y, X is 2+2, Z = Y.
16
Igualdad y Desigualdad III
 El predicado no es igual, =, también está predefinido:
 ?- X = Y.
Se satisface si no se cumple el objetivo X = Y.
17
Ejercicio Operadores
2. Realiza un programa PROLOG que contenga en la base
de conocimiento los signos del Zodiaco. Por ejemplo:
horoscopo (aries, 21, 3, 21, 4).
Escribir dos reglas que permitan calcular el signo del
Zodiaco para un día y un mes concreto, por ejemplo:
?- signo(Dia, Mes, Signo).
18
Listas y recursión
19
Listas
20
 Tipo particular de árbol: cabeza y cola
 El functor/estructura asociado es “.”
 El final de la lista es “[]”
Lista de un solo elemento:
.(a, [])
.
a []
Lista: [a, b, c] .
a .
b .
c []
.(a, .(b, .(c,[])))
Representación habitual de las listas:
[a]
[a,b,c]
[los, hombres, [van, a, pescar]]
Cabeza es el primer término.
Cola es una lista que contiene al resto.
Un forma de instanciar a una lista con
cabeza X y cola Y sería:
[X|Y]
Recursión I
 Natural en muchas definiciones declarativas.
 Perspectiva operacional: natural si misma operación
sobre distintos datos.
 Esquema genérico:
1. Caso base: entero(0).
2. Luego recurrir: entero(X):- entero(Y), X is Y+1.
21
Recursión y listas
 Pertenencia: saber si un objeto pertenece a una lista.
 Construir el predicado “miembro”:
 Caso base: comprobar si el elemento está en la cabeza
miembro(X, [X|_]). (  miembro(X, [Y|_]):- X=Y. )
 Luego recurrir sobre la cola
miembro(X, [_|Y]) :- miembro(X,Y).
 Verifica la pertenencia a la cola y de forma recursiva va
operando sobre otra lista progresivamente más pequeña
22
Recursión II
 Cuidado con la recursión por la izquierda:
enteroMal(X):- enteroMal(Y), X is Y+1.
enteroMal(0).
?- enteroMal(X).
ERROR: Out of local stack
 Colocar la regla recursiva como última cláusula de programa.
 Evitar definiciones circulares:
padre(X, Y) :- hijo(Y, X).
hijo(A, B) :- padre(B, A).
(se entra en un bucle infinito)
23
Operaciones con listas:
Insertar un elemento
 Queremos introducir un elemento X al comienzo de la
Lista.
 El elemento X pasará a ser la nueva cabeza de la nueva lista.
 El cuerpo de la nueva lista será la antigua Lista.
 Definición:
 insertar1(X, Lista, Resultado) :- Resultado = [X|Lista].
 Versión compacta:
 insertar(X, Lista, [X|Lista]).
 Ejemplos:
?- insertar(1, [3, 5, 7], Primos).
Primos = [1, 3, 5, 7]
Yes
?- insertar(rojo, [verde, azul], Colores).
Colores = [rojo, verde, azul]
Yes 24
Operaciones con listas:
Concatenar listas
 Existe un predicado predefinido append:
?- append([a, b, c], [1, 2, 3], X).
X=[a, b, c, 1, 2, 3]
?- append(X, [b, c, d], [a, b, c, d]).
X=[a]
?- append([a], [1, 2, 3], [a, 1, 2, 3]).
Yes
?- append([a], [1, 2, 3], [alfa, beta, gamma]).
No
 Definición:
concatena([], L, L).
concatena([X|L1], L2, [X|L3]) :- concatena(L1, L2, L3).
25
Ejercicios Listas y recursión (I)
3. Definir procedimientos (predicados) para las siguientes
operaciones con listas, sin utilizar el correspondiente
operador Prolog
1. es_lista? (Lista)
¿Se corresponde Lista con la definición de lista en
PROLOG?.
2. longitud(L, Num)
Determina el número de elementos de L.
26
Ejercicios Listas y recursión (II)
27
Inventario de piezas
bicicleta
rueda_delantera cuadro rueda_trasera
manillar sillín tracción
eje plato pedales
llanta radios eje llanta radios eje piñones
cadena
Ejercicios Listas y recursión (III)
4. Definir el árbol “Inventario de piezas” mediante las
relaciones:
 pieza_basica(cadena).
 ensamblaje(bicicleta, [rueda_delantera, cuadro,
rueda_trasera]).
Definir el procedimiento “piezas_de”, que sirva para
obtener la lista de piezas básicas para construir una
determinada parte de (o toda) la bicicleta.
28
Satisfacción de Objetivos I
padre(juan, antonio).
padre(juan, luis).
padre(luis, pedro).
abuelo(X, Y) :- padre(X, Z), padre(Z, Y).
?- trace, abuelo(juan, X), notrace.
Call: (8) abuelo(juan, _G382) ? creep
Call: (9) padre(juan, _L162) ? creep
Exit: (9) padre(juan, antonio) ? creep
Call: (9) padre(antonio, _G382) ? creep
Fail: (9) padre(antonio, _G382) ? creep
Redo: (9) padre(juan, _L162) ? creep
Exit: (9) padre(juan, luis) ? creep
Call: (9) padre(luis, _G382) ? creep
Exit: (9) padre(luis, pedro) ? creep
Exit: (8) abuelo(juan, pedro) ? creep
X = pedro ; [trace]
No
29
abuelo(juan ,G1)
padre(juan,Z1),padre(Z1,Y1)
padre(antonio,Y1) padre(luis,Y1)
fallo meta vacía
abuelo(X1, Y1) :- padre(X1, Z1), padre(Z1, Y1).
padre(juan,antonio). padre(juan, luis).
padre(luis, pedro).
luis/Z1
antonio/Z1
juan/X1,
Y1/G1
pedro/Y1
Satisfacción de Objetivos II
padre(juan, antonio). padre(juan, luis). padre(luis, pedro). padre(luis,ana).
abuelo(X, Y) :- padre(X, Z), padre(Z, Y).
?- trace,abuelo(juan,X),notrace.
Call: (8) abuelo(juan, _G537) ? creep
Call: (9) padre(juan, _L200) ? creep
Exit: (9) padre(juan, antonio) ? creep
Call: (9) padre(antonio, _G537) ? creep
Fail: (9) padre(antonio, _G537) ? creep
Redo: (9) padre(juan, _L200) ? creep
Exit: (9) padre(juan, luis) ? creep
Call: (9) padre(luis, _G537) ? creep
Exit: (9) padre(luis, pedro) ? creep
Exit: (8) abuelo(juan, pedro) ? creep
X = pedro ; [trace]
Redo: (9) padre(luis, _G537) ? creep
Exit: (9) padre(luis, ana) ? creep
Exit: (8) abuelo(juan, ana) ? creep
X = ana ; [trace]
No
31
abuelo(juan ,G1)
padre(juan,Z1),padre(Z1,Y1)
padre(antonio,Y1) padre(luis,Y1)
fallo meta vacía
abuelo(X1, Y1) :- padre(X1, Z1), padre(Z1, Y1).
padre(juan,antonio). padre(juan, luis).
padre(luis, pedro).
luis/Z1
antonio/Z1
juan/X1,
Y1/G1
pedro/Y1
meta vacía
padre(luis, ana).
ana/Y1
El predicado corte: !
 Altera el flujo de control
 Evita explorar ramas del árbol de búsqueda
 Eficiencia
 Correcto funcionamiento
 Pero: altera el significado declarativo del programa
Ejemplo corte I
 Ejemplo: Una biblioteca.
 Libros existentes.
 Libros prestados y a quién.
 Fecha de devolución del préstamo…
 Servicios básicos (accesibles a cualquiera):
 Biblioteca de referencias o mostrador de consulta
 Servicios adicionales (regla):
 Préstamo normal o interbibliotecario.
 Regla: no permitir servicios adicionales a personas con
libros pendientes de devolver.
34
Ejemplo corte II
libros_por_devolver(c_perez, libro109). libros_por_devolver(a_ramos, libro297).
cliente(a_ramos). cliente(c_perez). cliente(p_gonzalez).
servicio_basico(referencia). servicio_basico(consulta).
servicio_adicional(prestamo). servicio_adicional(pres_inter_biblio).
servicio_general(X) :- servicio_basico(X).
servicio_general(X) :- servicio_adicional(X).
servicio(Pers, Serv):-
cliente(Pers),
libros_por_devolver(Pers, Libro),
!,
servicio_basico(Serv).
servicio(Pers, Serv):-
cliente(Pers),
servicio_general(Serv).
El predicado corte:
alteración del flujo de control
?- cliente(X), servicio(X, Y).
cliente(X)
servicio(a_ramos, Y)
libros_por_devolver(a_ramos, Z)
!
servicio_basico(Y)
Si intentamos re-satisfacer:
cliente(a_ramos)
meta padre
cliente(X)
servicio(a_ramos, Y)
libros_por_devolver(a_ramos, Z)
!
servicio_basico(Y)
cliente(a_ramos)
El predicado corte:
caracterización operacional
 El predicado corte siempre se satisface
 Definición operacional
 Meta padre: meta que se redujo con la cláusula que
contiene el predicado corte
 Si se alcanza el predicado corte
 Se satisface eliminándolo de la meta
 Si se vuelve al predicado corte (backtracking)
 Devuelve control a la meta anterior a la meta padre
 Obliga a mantener todas las elecciones realizadas entre
la meta padre y el corte
 Las posibles alternativas no se consideran
37
Aplicaciones del predicado corte
 Indicar al sistema que ha llegado a un regla adecuada
para satisfacer un objetivo (“si has llegado hasta aquí,
has escogido la opción adecuada”)
 Indicar al sistema que debe fallar y no buscar
soluciones alternativas (“si has llegado hasta aquí,
debes dejar de intentar satisfacer el objetivo”)
 Evitar la generación de soluciones múltiples mediante
reevaluaciones (“si has llegado hasta aquí, has
encontrado una solución, no sigas buscando”)
38
Predicado fail
 fail es un predicado predefinido en Prolog.
 Siempre produce un fracaso en la satisfacción del
objetivo.
 Desencadena proceso de reevaluación.
39
carnet_uva(X):-
matriculado(X), write(X), nl, fail.
matriculado(juan).
matriculado(pedro).
matriculado(maria).
matriculado(ana).
?- carnet_uva(X).
juan
pedro
maria
ana
No
Combinación corte-fail y negación I
 „A Elena le gustan los animales, salvo las serpientes‟
gusta1(elena, X):- serpiente(X), !, fail.
gusta1(elena, X):-animal(X).
animal(snoopy).
animal(lamia).
serpiente(lamia).
gusta1(elena, X):- serpiente(X), !, fail.
gusta1(elena, X):-animal(X).
?- gusta1(elena, lamia).
no
?- gusta1(elena, snoopy).
Yes
?-gusta1(elena,X).
no 40
Combinación corte-fail y negación II
 Negación : „+‟
animal(snoopy).
animal(lamia).
serpiente(lamia).
gusta(elena, X):- animal(X), + serpiente(X).
?- gusta(elena, lamia).
no
?- gusta(elena, snoopy).
Yes
?-gusta(elena,X).
no
41
Ejercicios predicado corte
5. Implementar una función f(X,Y) que nos proporcione el valor
de una función tipo doble escalón con la siguiente definición:
5. Si X < 3 entonces Y:= 0 fin
6. Si X >= 3 y X < 6 entonces Y:= 2 fin
7. Si X > 6 entonces Y := 4 fin
6. Implementar el predicado borrar_primera(X, Y, Z), que
elimina la primera ocurrencia de X en la lista Y generando la
lista Z.
7. Implementar el predicado borrar_todas(X, Y, Z), que elimina
todas las ocurrencias de X en la lista Y generando la lista Z.
(sugerencia: utilizar el predicado auxiliar borrar_cabeza, que
toma el elemento y al cabeza y devuelve la lista resultante).
8. Implementar el predicado añadir_sin_duplicar(X, Y, Z) que
crea la lista Z añadiendo X a la lista Y si y sólo si X no está en
Y.
42

More Related Content

What's hot

Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto FinalJorge Ramon
 
Modelo relacional y reglas de integridad
Modelo relacional y reglas de integridadModelo relacional y reglas de integridad
Modelo relacional y reglas de integridadkamui002
 
Metricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccionMetricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccionJose Diaz Silva
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicojosecuartas
 
25 Estandares - IEEE Calidad de Software
25 Estandares - IEEE Calidad de Software25 Estandares - IEEE Calidad de Software
25 Estandares - IEEE Calidad de SoftwareCamila Arbelaez
 
Agentes inteligentes
Agentes inteligentesAgentes inteligentes
Agentes inteligentesEmmanuel Lara
 
Guia tecnica para evaluación de software
Guia tecnica para evaluación de softwareGuia tecnica para evaluación de software
Guia tecnica para evaluación de softwareAlex Betancur
 
Normas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de SoftwareNormas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de SoftwareEvelinBermeo
 
Plan de pruebas de software
Plan de pruebas de softwarePlan de pruebas de software
Plan de pruebas de softwareEdgardo Rojas
 
Guia 1 de hilos y procesos posix
Guia 1 de hilos y procesos posixGuia 1 de hilos y procesos posix
Guia 1 de hilos y procesos posixMariano Gutierrez
 
Análisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de softwareAnálisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de softwareAngel Reyes
 
Cuadro comparativo estandares de calidad software
Cuadro comparativo estandares de calidad softwareCuadro comparativo estandares de calidad software
Cuadro comparativo estandares de calidad softwareHumano Terricola
 
Requerimiento funcional y no funcional
Requerimiento funcional y no funcional Requerimiento funcional y no funcional
Requerimiento funcional y no funcional CristobalFicaV
 

What's hot (20)

Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto Final
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
Modelo relacional y reglas de integridad
Modelo relacional y reglas de integridadModelo relacional y reglas de integridad
Modelo relacional y reglas de integridad
 
Metricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccionMetricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccion
 
Conceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de DatosConceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de Datos
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
 
Rational rose
Rational roseRational rose
Rational rose
 
25 Estandares - IEEE Calidad de Software
25 Estandares - IEEE Calidad de Software25 Estandares - IEEE Calidad de Software
25 Estandares - IEEE Calidad de Software
 
Agentes inteligentes
Agentes inteligentesAgentes inteligentes
Agentes inteligentes
 
Guia tecnica para evaluación de software
Guia tecnica para evaluación de softwareGuia tecnica para evaluación de software
Guia tecnica para evaluación de software
 
PSW Unidad 1 PROCESO DE SOFTWARE
PSW Unidad 1 PROCESO DE SOFTWAREPSW Unidad 1 PROCESO DE SOFTWARE
PSW Unidad 1 PROCESO DE SOFTWARE
 
Normas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de SoftwareNormas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de Software
 
Plan de pruebas de software
Plan de pruebas de softwarePlan de pruebas de software
Plan de pruebas de software
 
Calculo relacional
Calculo relacionalCalculo relacional
Calculo relacional
 
Guia 1 de hilos y procesos posix
Guia 1 de hilos y procesos posixGuia 1 de hilos y procesos posix
Guia 1 de hilos y procesos posix
 
Análisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de softwareAnálisis de riesgos de un proyecto de software
Análisis de riesgos de un proyecto de software
 
Cuadro comparativo estandares de calidad software
Cuadro comparativo estandares de calidad softwareCuadro comparativo estandares de calidad software
Cuadro comparativo estandares de calidad software
 
22 ejercicios base de datos
22 ejercicios base de datos 22 ejercicios base de datos
22 ejercicios base de datos
 
5. Métodos de Prueba de Software
5. Métodos de Prueba de Software5. Métodos de Prueba de Software
5. Métodos de Prueba de Software
 
Requerimiento funcional y no funcional
Requerimiento funcional y no funcional Requerimiento funcional y no funcional
Requerimiento funcional y no funcional
 

Similar to Practica i prolog

Similar to Practica i prolog (20)

Operadores en prolog
Operadores en prologOperadores en prolog
Operadores en prolog
 
Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacion
 
Programacion logica
Programacion logicaProgramacion logica
Programacion logica
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
Matematica1
Matematica1Matematica1
Matematica1
 
U81 l11
U81 l11U81 l11
U81 l11
 
Topicos i
Topicos iTopicos i
Topicos i
 
Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_
 
Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_
 
Programación en Prolog para Inteligencia Artificial
Programación en Prolog para Inteligencia ArtificialProgramación en Prolog para Inteligencia Artificial
Programación en Prolog para Inteligencia Artificial
 
Programacion_en_Python_parte_2.pptx
Programacion_en_Python_parte_2.pptxProgramacion_en_Python_parte_2.pptx
Programacion_en_Python_parte_2.pptx
 
Funciones
FuncionesFunciones
Funciones
 
Funcion recursiva
Funcion recursivaFuncion recursiva
Funcion recursiva
 
9. listas y for-in
9.  listas y for-in9.  listas y for-in
9. listas y for-in
 
Apuntes Nº4 (TDA Estructuras Lineales).pptx
Apuntes Nº4 (TDA Estructuras Lineales).pptxApuntes Nº4 (TDA Estructuras Lineales).pptx
Apuntes Nº4 (TDA Estructuras Lineales).pptx
 
Haskell
HaskellHaskell
Haskell
 
Transparencias3
Transparencias3Transparencias3
Transparencias3
 
Arreglos
ArreglosArreglos
Arreglos
 
Power logaritmos
Power logaritmos Power logaritmos
Power logaritmos
 
Ecuaciones exponenciales y logarítmicas
Ecuaciones exponenciales y logarítmicas Ecuaciones exponenciales y logarítmicas
Ecuaciones exponenciales y logarítmicas
 

Recently uploaded

Técnica palatina baja, anestesiología dental
Técnica palatina baja, anestesiología dentalTécnica palatina baja, anestesiología dental
Técnica palatina baja, anestesiología dentalIngrid459352
 
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptxINTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptxJamesHerberthBacaTel
 
Familias_más_ricas_de_AL_en_la_historia.pdf
Familias_más_ricas_de_AL_en_la_historia.pdfFamilias_más_ricas_de_AL_en_la_historia.pdf
Familias_más_ricas_de_AL_en_la_historia.pdfJC Díaz Herrera
 
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdfPosiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdfJC Díaz Herrera
 
Las marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdfLas marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdfJC Díaz Herrera
 
Las familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfLas familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfJC Díaz Herrera
 
Posiciones de México en el PNB PPA per cápita (1982-2024).pdf
Posiciones de México en el PNB PPA per cápita (1982-2024).pdfPosiciones de México en el PNB PPA per cápita (1982-2024).pdf
Posiciones de México en el PNB PPA per cápita (1982-2024).pdfJC Díaz Herrera
 
Triptico-del-Bullying qué es, cómo detectarlo, donde acudir
Triptico-del-Bullying qué es, cómo detectarlo, donde acudirTriptico-del-Bullying qué es, cómo detectarlo, donde acudir
Triptico-del-Bullying qué es, cómo detectarlo, donde acudirluis809799
 
Los más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdfLos más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdfJC Díaz Herrera
 
Listas de Fundamentos de Programación 2024
Listas de Fundamentos de Programación 2024Listas de Fundamentos de Programación 2024
Listas de Fundamentos de Programación 2024AndrsReinosoSnchez1
 
presentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.pptpresentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.pptMelina Alama Visitacion
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticJamithGarcia1
 
Presentacion-Prevencion-Incendios-Forestales.pdf
Presentacion-Prevencion-Incendios-Forestales.pdfPresentacion-Prevencion-Incendios-Forestales.pdf
Presentacion-Prevencion-Incendios-Forestales.pdfDodiAcuaArstica
 
Gestión Logística maria palmira guti cabajal
Gestión Logística maria palmira guti cabajalGestión Logística maria palmira guti cabajal
Gestión Logística maria palmira guti cabajalMarcosAlvarezSalinas
 
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxAA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxLuisAngelYomonaYomon
 
Países por velocidad de sus misiles hipersónicos (2024).pdf
Países por velocidad de sus misiles hipersónicos  (2024).pdfPaíses por velocidad de sus misiles hipersónicos  (2024).pdf
Países por velocidad de sus misiles hipersónicos (2024).pdfJC Díaz Herrera
 
Las mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfLas mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfJC Díaz Herrera
 
Novelas Turcas vs Series de EUA en audiencia (2024).pdf
Novelas Turcas vs Series de EUA en audiencia  (2024).pdfNovelas Turcas vs Series de EUA en audiencia  (2024).pdf
Novelas Turcas vs Series de EUA en audiencia (2024).pdfJC Díaz Herrera
 
triptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescenciatriptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescenciaferg6120
 
Posiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfPosiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfJC Díaz Herrera
 

Recently uploaded (20)

Técnica palatina baja, anestesiología dental
Técnica palatina baja, anestesiología dentalTécnica palatina baja, anestesiología dental
Técnica palatina baja, anestesiología dental
 
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptxINTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
INTRODUCCION-A-LOS-ALGORITMOS-BASICOS.pptx
 
Familias_más_ricas_de_AL_en_la_historia.pdf
Familias_más_ricas_de_AL_en_la_historia.pdfFamilias_más_ricas_de_AL_en_la_historia.pdf
Familias_más_ricas_de_AL_en_la_historia.pdf
 
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdfPosiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
Posiciones_del_sionismo_en_los_imperios globales de la humanidad (2024).pdf
 
Las marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdfLas marcas automotrices con más ventas de vehículos (2024).pdf
Las marcas automotrices con más ventas de vehículos (2024).pdf
 
Las familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdfLas familias más ricas del sionismo en el siglo XXI.pdf
Las familias más ricas del sionismo en el siglo XXI.pdf
 
Posiciones de México en el PNB PPA per cápita (1982-2024).pdf
Posiciones de México en el PNB PPA per cápita (1982-2024).pdfPosiciones de México en el PNB PPA per cápita (1982-2024).pdf
Posiciones de México en el PNB PPA per cápita (1982-2024).pdf
 
Triptico-del-Bullying qué es, cómo detectarlo, donde acudir
Triptico-del-Bullying qué es, cómo detectarlo, donde acudirTriptico-del-Bullying qué es, cómo detectarlo, donde acudir
Triptico-del-Bullying qué es, cómo detectarlo, donde acudir
 
Los más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdfLos más ricos administradores de fondo de cobertura (1968-2024).pdf
Los más ricos administradores de fondo de cobertura (1968-2024).pdf
 
Listas de Fundamentos de Programación 2024
Listas de Fundamentos de Programación 2024Listas de Fundamentos de Programación 2024
Listas de Fundamentos de Programación 2024
 
presentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.pptpresentacion de conjuntos para primaria.ppt
presentacion de conjuntos para primaria.ppt
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
 
Presentacion-Prevencion-Incendios-Forestales.pdf
Presentacion-Prevencion-Incendios-Forestales.pdfPresentacion-Prevencion-Incendios-Forestales.pdf
Presentacion-Prevencion-Incendios-Forestales.pdf
 
Gestión Logística maria palmira guti cabajal
Gestión Logística maria palmira guti cabajalGestión Logística maria palmira guti cabajal
Gestión Logística maria palmira guti cabajal
 
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docxAA CUADRO DE TEORIA DEL CASO. (1) (1).docx
AA CUADRO DE TEORIA DEL CASO. (1) (1).docx
 
Países por velocidad de sus misiles hipersónicos (2024).pdf
Países por velocidad de sus misiles hipersónicos  (2024).pdfPaíses por velocidad de sus misiles hipersónicos  (2024).pdf
Países por velocidad de sus misiles hipersónicos (2024).pdf
 
Las mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfLas mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdf
 
Novelas Turcas vs Series de EUA en audiencia (2024).pdf
Novelas Turcas vs Series de EUA en audiencia  (2024).pdfNovelas Turcas vs Series de EUA en audiencia  (2024).pdf
Novelas Turcas vs Series de EUA en audiencia (2024).pdf
 
triptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescenciatriptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescencia
 
Posiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdfPosiciones en el IDH global de EUA (1950-2024).pdf
Posiciones en el IDH global de EUA (1950-2024).pdf
 

Practica i prolog

  • 1. Práctica I Prolog I: Elementos básicos de Prolog
  • 2. Contenidos  Cláusulas de Prolog.  Estructuras, operadores e igualdad.  Listas y recursión.  Satisfacción de objetivos.  Predicado corte. 2
  • 4. Prolog y Programación Lógica  Prolog: inplementeción secuencial del modelo del Programa Normal  Programa Prolog: Conjunto de Cláusulas Horn  Ejecución: inferencia lógica (busqueda)  Como inferencia: Resolución SLDNF  Cómo búsqueda: primero en profundidad, resolviendo primero con el primer literal a la izquerda  El orden de las cláusulas es relevante  Elementos extra-lógicos: clausulas ejecutable, alteración del flujo de control, entre otras. 4
  • 5. Cláusulas de Prolog: Hechos  Describen una propiedades de objetos  Ejemplo: el diamante es valioso  Hecho: valioso(diamante).  El programador debe definir la interpretación de los objetos y las relaciones entre ellos:  Objetos: juan, libro  Relación: tiene(juan, libro)  El orden de la relación es importante 5
  • 6. Cláusulas de Prolog: Reglas  Establecen dependencias entre hechos  Estructura de una regla <cabeza> :- <cuerpo> <cabeza>  relación con variables <cuerpo>  conjunción de relaciones con variables  Ejemplo: abueloPaterno(X, Z):-padre(X,Y), padre(Y, Z)  Variables: X, Y, Z (palabras que empiezan por mayúscula o guion bajo: “_”)  Conjunción: “,” 6
  • 7. Cláusulas de Prolog: consultas I  Comienzan por: ?-  Equivale a preguntar: “¿la consulta se deduce de la base de conocimiento (hechos + reglas)?”  Ante una consulta, PROLOG intenta hacer un matching sobre la base de conocimiento:  Mismo predicado  Mismo número de argumentos  Mismos argumentos: términos / variables (instanciadas) 7
  • 8. Cláusulas de Prolog: consultas II  Las respuestas a una consulta pueden ser:  Yes Se deduce de la BC  No No se deduce  ¿Qué responder a una consulta?  [ENTER]  Termina  ;  ¿Hay más respuestas? 8 Base de conocimiento Consultas Respuestas le_gusta_a(jose, maria). le_gusta_a(maria, libro). le_gusta_a(juan, coche). le_gusta_a(jose, pescado). ?- le_gusta_a(maria,jose). No ?- le_gusta_a(maria, libro). Yes ?- le_gusta_a(juan, pescado). No ?- le_gusta_a(jose, pescado). Yes
  • 9. Un programa ejemplo /* Ejemplo1_0. pl  Los comentarios como en C */ /* Hechos: le_gusta_a(A,B) --> a A le_gusta B */ le_gusta_a(juan, maria). le_gusta_a(pedro, coche). le_gusta_a(maria, libro). le_gusta_a(maria, juan). le_gusta_a(jose, maria). le_gusta_a(jose, coche). le_gusta_a(jose, pescado). /* Reglas: es_amigo_de (juan, Persona) --> juan es amigo de Persona si a Persona le gustan los coches */ es_amigo_de(juan,X):- le_gusta_a(X, coche). 9
  • 10. Ejercicio Cláusulas de Prolog 1. Elaborar una programa Prolog que describa a las personas de su familia, sujeto a: 1. Hechos. El programa debe de incluir la siguiente información mediante hechos: 1. Hombres y mujeres que la componen: hombre(X), mujer(X) 2. La relación de parentesco más sencilla: es_ hijo_de(X,Y) 2. Reglas. Que permitan saber 1. quién es abuelo/a de quién, 2. quién es padre/madre, 3. quién es hermana/hermano. 3. No se permite el uso de operadores en las reglas. 4. Realizar la consulta ?-hermano(X,Y) y analizar el resultado. 10
  • 12. Estructuras  Sintaxis: functor(comp#1, comp#2,... …,comp#n).  En general, functor es un nombre que designa:  un hecho,  una relación,  una función  A su vez, comp#i, puede ser un functor  Ejemplo: curso-27(titulacion(“Grado en Informática”), materia(sistemas_inteligentes)).  Incluso las cláusulas se representan como functores: ?- clause(X, Y). /* Se satisface con clausulas de cabeza X y cuerpo Y */ 12
  • 13. Operadores aritméticos básicos  +, -, *, y /.  Todos infijo  Como cualquier otra estructura  Evaluación: is  ?- X is 2 + 2.  ?- X is +(2,2).  ?- 4 is +(2,2). 13
  • 14. Igualdad y Desigualdad I  El predicado igualdad, =, está predefinido:  ?- X = Y. PROLOG, para satisfacer el objetivo, comprueba si ambas pueden ligarse al mismo objeto.  Reglas para decidir si X e Y son “iguales”:  Si X no está instanciada e Y sí, entonces son iguales y X toma como valor el término al que estuviese instanciado Y.  Los números y los átomos siempre son iguales entre sí.  Dos estructuras son iguales si tienen el mismo functor y el mismo número de argumentos, y cada uno de esos argumentos son iguales. 14
  • 15. Ejemplos igualdad 15 consulta respuesta ?- mesa=mesa. Yes ?- silla = silla. Yes ?- mesa = silla. No ?- 2010 = 2009. No curso-27(X, materia(Y))=curso- 27(titulacion(“Grado en Informática”), materia(sistemas_inteligentes)). X=(titulacion(“Grado en Informática”) Y=sistemas_inteligentes curso-27(_, materia(Y))=curso- 27(titulacion(“Grado en Informática”), materia(sistemas_inteligentes)). Y=sistemas_inteligentes
  • 16. Igualdad y Desigualdad II  Reglas para decidir si X e Y son “iguales”:  Si las 2 variables no están instanciadas, se cumple la igualdad y pasan a ser variables compartidas.  ?- X = Y. (Cuando una de ellas quede instanciada, fijará el valor de la otra.) No tiene interés de forma aislada, pero:  ?- X=Y, X is 2+2, Z = Y. 16
  • 17. Igualdad y Desigualdad III  El predicado no es igual, =, también está predefinido:  ?- X = Y. Se satisface si no se cumple el objetivo X = Y. 17
  • 18. Ejercicio Operadores 2. Realiza un programa PROLOG que contenga en la base de conocimiento los signos del Zodiaco. Por ejemplo: horoscopo (aries, 21, 3, 21, 4). Escribir dos reglas que permitan calcular el signo del Zodiaco para un día y un mes concreto, por ejemplo: ?- signo(Dia, Mes, Signo). 18
  • 20. Listas 20  Tipo particular de árbol: cabeza y cola  El functor/estructura asociado es “.”  El final de la lista es “[]” Lista de un solo elemento: .(a, []) . a [] Lista: [a, b, c] . a . b . c [] .(a, .(b, .(c,[]))) Representación habitual de las listas: [a] [a,b,c] [los, hombres, [van, a, pescar]] Cabeza es el primer término. Cola es una lista que contiene al resto. Un forma de instanciar a una lista con cabeza X y cola Y sería: [X|Y]
  • 21. Recursión I  Natural en muchas definiciones declarativas.  Perspectiva operacional: natural si misma operación sobre distintos datos.  Esquema genérico: 1. Caso base: entero(0). 2. Luego recurrir: entero(X):- entero(Y), X is Y+1. 21
  • 22. Recursión y listas  Pertenencia: saber si un objeto pertenece a una lista.  Construir el predicado “miembro”:  Caso base: comprobar si el elemento está en la cabeza miembro(X, [X|_]). (  miembro(X, [Y|_]):- X=Y. )  Luego recurrir sobre la cola miembro(X, [_|Y]) :- miembro(X,Y).  Verifica la pertenencia a la cola y de forma recursiva va operando sobre otra lista progresivamente más pequeña 22
  • 23. Recursión II  Cuidado con la recursión por la izquierda: enteroMal(X):- enteroMal(Y), X is Y+1. enteroMal(0). ?- enteroMal(X). ERROR: Out of local stack  Colocar la regla recursiva como última cláusula de programa.  Evitar definiciones circulares: padre(X, Y) :- hijo(Y, X). hijo(A, B) :- padre(B, A). (se entra en un bucle infinito) 23
  • 24. Operaciones con listas: Insertar un elemento  Queremos introducir un elemento X al comienzo de la Lista.  El elemento X pasará a ser la nueva cabeza de la nueva lista.  El cuerpo de la nueva lista será la antigua Lista.  Definición:  insertar1(X, Lista, Resultado) :- Resultado = [X|Lista].  Versión compacta:  insertar(X, Lista, [X|Lista]).  Ejemplos: ?- insertar(1, [3, 5, 7], Primos). Primos = [1, 3, 5, 7] Yes ?- insertar(rojo, [verde, azul], Colores). Colores = [rojo, verde, azul] Yes 24
  • 25. Operaciones con listas: Concatenar listas  Existe un predicado predefinido append: ?- append([a, b, c], [1, 2, 3], X). X=[a, b, c, 1, 2, 3] ?- append(X, [b, c, d], [a, b, c, d]). X=[a] ?- append([a], [1, 2, 3], [a, 1, 2, 3]). Yes ?- append([a], [1, 2, 3], [alfa, beta, gamma]). No  Definición: concatena([], L, L). concatena([X|L1], L2, [X|L3]) :- concatena(L1, L2, L3). 25
  • 26. Ejercicios Listas y recursión (I) 3. Definir procedimientos (predicados) para las siguientes operaciones con listas, sin utilizar el correspondiente operador Prolog 1. es_lista? (Lista) ¿Se corresponde Lista con la definición de lista en PROLOG?. 2. longitud(L, Num) Determina el número de elementos de L. 26
  • 27. Ejercicios Listas y recursión (II) 27 Inventario de piezas bicicleta rueda_delantera cuadro rueda_trasera manillar sillín tracción eje plato pedales llanta radios eje llanta radios eje piñones cadena
  • 28. Ejercicios Listas y recursión (III) 4. Definir el árbol “Inventario de piezas” mediante las relaciones:  pieza_basica(cadena).  ensamblaje(bicicleta, [rueda_delantera, cuadro, rueda_trasera]). Definir el procedimiento “piezas_de”, que sirva para obtener la lista de piezas básicas para construir una determinada parte de (o toda) la bicicleta. 28
  • 29. Satisfacción de Objetivos I padre(juan, antonio). padre(juan, luis). padre(luis, pedro). abuelo(X, Y) :- padre(X, Z), padre(Z, Y). ?- trace, abuelo(juan, X), notrace. Call: (8) abuelo(juan, _G382) ? creep Call: (9) padre(juan, _L162) ? creep Exit: (9) padre(juan, antonio) ? creep Call: (9) padre(antonio, _G382) ? creep Fail: (9) padre(antonio, _G382) ? creep Redo: (9) padre(juan, _L162) ? creep Exit: (9) padre(juan, luis) ? creep Call: (9) padre(luis, _G382) ? creep Exit: (9) padre(luis, pedro) ? creep Exit: (8) abuelo(juan, pedro) ? creep X = pedro ; [trace] No 29
  • 30. abuelo(juan ,G1) padre(juan,Z1),padre(Z1,Y1) padre(antonio,Y1) padre(luis,Y1) fallo meta vacía abuelo(X1, Y1) :- padre(X1, Z1), padre(Z1, Y1). padre(juan,antonio). padre(juan, luis). padre(luis, pedro). luis/Z1 antonio/Z1 juan/X1, Y1/G1 pedro/Y1
  • 31. Satisfacción de Objetivos II padre(juan, antonio). padre(juan, luis). padre(luis, pedro). padre(luis,ana). abuelo(X, Y) :- padre(X, Z), padre(Z, Y). ?- trace,abuelo(juan,X),notrace. Call: (8) abuelo(juan, _G537) ? creep Call: (9) padre(juan, _L200) ? creep Exit: (9) padre(juan, antonio) ? creep Call: (9) padre(antonio, _G537) ? creep Fail: (9) padre(antonio, _G537) ? creep Redo: (9) padre(juan, _L200) ? creep Exit: (9) padre(juan, luis) ? creep Call: (9) padre(luis, _G537) ? creep Exit: (9) padre(luis, pedro) ? creep Exit: (8) abuelo(juan, pedro) ? creep X = pedro ; [trace] Redo: (9) padre(luis, _G537) ? creep Exit: (9) padre(luis, ana) ? creep Exit: (8) abuelo(juan, ana) ? creep X = ana ; [trace] No 31
  • 32. abuelo(juan ,G1) padre(juan,Z1),padre(Z1,Y1) padre(antonio,Y1) padre(luis,Y1) fallo meta vacía abuelo(X1, Y1) :- padre(X1, Z1), padre(Z1, Y1). padre(juan,antonio). padre(juan, luis). padre(luis, pedro). luis/Z1 antonio/Z1 juan/X1, Y1/G1 pedro/Y1 meta vacía padre(luis, ana). ana/Y1
  • 33. El predicado corte: !  Altera el flujo de control  Evita explorar ramas del árbol de búsqueda  Eficiencia  Correcto funcionamiento  Pero: altera el significado declarativo del programa
  • 34. Ejemplo corte I  Ejemplo: Una biblioteca.  Libros existentes.  Libros prestados y a quién.  Fecha de devolución del préstamo…  Servicios básicos (accesibles a cualquiera):  Biblioteca de referencias o mostrador de consulta  Servicios adicionales (regla):  Préstamo normal o interbibliotecario.  Regla: no permitir servicios adicionales a personas con libros pendientes de devolver. 34
  • 35. Ejemplo corte II libros_por_devolver(c_perez, libro109). libros_por_devolver(a_ramos, libro297). cliente(a_ramos). cliente(c_perez). cliente(p_gonzalez). servicio_basico(referencia). servicio_basico(consulta). servicio_adicional(prestamo). servicio_adicional(pres_inter_biblio). servicio_general(X) :- servicio_basico(X). servicio_general(X) :- servicio_adicional(X). servicio(Pers, Serv):- cliente(Pers), libros_por_devolver(Pers, Libro), !, servicio_basico(Serv). servicio(Pers, Serv):- cliente(Pers), servicio_general(Serv).
  • 36. El predicado corte: alteración del flujo de control ?- cliente(X), servicio(X, Y). cliente(X) servicio(a_ramos, Y) libros_por_devolver(a_ramos, Z) ! servicio_basico(Y) Si intentamos re-satisfacer: cliente(a_ramos) meta padre cliente(X) servicio(a_ramos, Y) libros_por_devolver(a_ramos, Z) ! servicio_basico(Y) cliente(a_ramos)
  • 37. El predicado corte: caracterización operacional  El predicado corte siempre se satisface  Definición operacional  Meta padre: meta que se redujo con la cláusula que contiene el predicado corte  Si se alcanza el predicado corte  Se satisface eliminándolo de la meta  Si se vuelve al predicado corte (backtracking)  Devuelve control a la meta anterior a la meta padre  Obliga a mantener todas las elecciones realizadas entre la meta padre y el corte  Las posibles alternativas no se consideran 37
  • 38. Aplicaciones del predicado corte  Indicar al sistema que ha llegado a un regla adecuada para satisfacer un objetivo (“si has llegado hasta aquí, has escogido la opción adecuada”)  Indicar al sistema que debe fallar y no buscar soluciones alternativas (“si has llegado hasta aquí, debes dejar de intentar satisfacer el objetivo”)  Evitar la generación de soluciones múltiples mediante reevaluaciones (“si has llegado hasta aquí, has encontrado una solución, no sigas buscando”) 38
  • 39. Predicado fail  fail es un predicado predefinido en Prolog.  Siempre produce un fracaso en la satisfacción del objetivo.  Desencadena proceso de reevaluación. 39 carnet_uva(X):- matriculado(X), write(X), nl, fail. matriculado(juan). matriculado(pedro). matriculado(maria). matriculado(ana). ?- carnet_uva(X). juan pedro maria ana No
  • 40. Combinación corte-fail y negación I  „A Elena le gustan los animales, salvo las serpientes‟ gusta1(elena, X):- serpiente(X), !, fail. gusta1(elena, X):-animal(X). animal(snoopy). animal(lamia). serpiente(lamia). gusta1(elena, X):- serpiente(X), !, fail. gusta1(elena, X):-animal(X). ?- gusta1(elena, lamia). no ?- gusta1(elena, snoopy). Yes ?-gusta1(elena,X). no 40
  • 41. Combinación corte-fail y negación II  Negación : „+‟ animal(snoopy). animal(lamia). serpiente(lamia). gusta(elena, X):- animal(X), + serpiente(X). ?- gusta(elena, lamia). no ?- gusta(elena, snoopy). Yes ?-gusta(elena,X). no 41
  • 42. Ejercicios predicado corte 5. Implementar una función f(X,Y) que nos proporcione el valor de una función tipo doble escalón con la siguiente definición: 5. Si X < 3 entonces Y:= 0 fin 6. Si X >= 3 y X < 6 entonces Y:= 2 fin 7. Si X > 6 entonces Y := 4 fin 6. Implementar el predicado borrar_primera(X, Y, Z), que elimina la primera ocurrencia de X en la lista Y generando la lista Z. 7. Implementar el predicado borrar_todas(X, Y, Z), que elimina todas las ocurrencias de X en la lista Y generando la lista Z. (sugerencia: utilizar el predicado auxiliar borrar_cabeza, que toma el elemento y al cabeza y devuelve la lista resultante). 8. Implementar el predicado añadir_sin_duplicar(X, Y, Z) que crea la lista Z añadiendo X a la lista Y si y sólo si X no está en Y. 42