View
1.028
Download
1
Embed Size (px)
Citation preview
PrologUniversidad de Boyacá
Esp. LEONARDO BERNAL ZAMORA
Estructura de un programa PROLOG
• Un programa Prolog está formado por unasecuencia de enunciados: hechos, reglas ycomentarios.
• Una relación puede estar especificada porhechos, simplemente estableciendo objetos quesatisfacen la relación o por reglas establecidasacerca de la relación.
• Cada regla está formada por un primer miembro(o la cabeza de la regla), un segundo miembro (ocola de la regla) ligados por " :- " y termina con elcarácter " . ".
• PROLOG es un lenguaje de programación para lacreación de sistemas inteligentes y trabajamediante reglas o programación lógica relacional,fue creado para representar y utilizar elconocimiento que se tiene sobre un determinadodominio, donde el dominio es un conjunto deobjetos y el conocimiento se representa por unconjunto de relaciones que describen laspropiedades de los objetos y sus interrelaciones;la extensión de los archivos en prolog es .pl
Hechos
• Expresan relaciones entre objetos. Suponga que sequiere expresar el hecho de que "un coche tiene ruedas".Este hecho, consta de dos objetos, "coche" y "ruedas", yde una relación llamada "tiene". La forma derepresentarlo en PROLOG es:
• tiene(coche,ruedas).
– Los nombres de objetos y relaciones deben comenzar con una letra minúscula.
– Primero se escribe la relación, y luego los objetos separados por comas y encerrados entre paréntesis.
– Al final de un hecho debe ir un punto (el carácter ".").
Variables
• Representan objetos que el mismo PROLOG determina. Lasvariables son cadenas de letras, dígitos y el signo '_'. Estasempiezan con una letra mayúscula o el símbolo '_': Unavariable puede estar instanciada o no instanciada. Estainstanciada cuando existe un objeto determinadorepresentado por la variable. De este modo, cuandopreguntamos "Un coche tiene X ?", PROLOG busca en loshechos cosas que tiene un coche y respondería:
• X = ruedas.
• Ejemplos de Variables• X
• Objeto2
• _23
• Resultado
• _x23
Reglas
• Las reglas se utilizan en PROLOG para significar que un hecho depende de uno o más hechos. Son la representación de las implicaciones lógicas del tipo p → q (p implica q).
• Una regla consiste en una cabeza y un cuerpo, unidos por el signo ":-".
• La cabeza esta formada por un único hecho.• El cuerpo puede ser uno o más hechos
(conjunción de hechos), separados por una coma (","), que actúa como el "y" lógico.
• Las reglas finalizan con un punto (".").
Reglas
• La cabeza en una regla PROLOG corresponde al consecuente de unaimplicación lógica, y el cuerpo al antecedente. Este hecho puedeconducir a errores de representación. Supongamos el siguienterazonamiento lógico:
• tiempo(lluvioso) → suelo(mojado)• suelo(mojado)
• Que el suelo esta mojado, es una condición suficiente de que eltiempo sea lluvioso, pero no necesaria. Por lo tanto, a partir de esehecho, no podemos deducir mediante la implicación, que esta‚lloviendo (pueden haber regado las calles). La representación“correcta” en PROLOG, sería:
• suelo(mojado) :- tiempo(lluvioso).• suelo(mojado).
Operadores
• Son predicados predefinidos en PROLOG para las operacionesmatemáticas básicas. Su sintaxis depende de la posición queocupen, pudiendo ser infijos o prefijos. Por ejemplo eloperador suma ("+"), podemos encontrarlo en forma prefija'+(2,5)' o bien infija, '2 + 5'.
• Aritméticos
• RelacionalesTambién dispone de predicados de igualdad y desigualdad.
• El operador 'is'. Es un operador infijo, que en su parte derecha lleva un término que se interpreta como una expresión aritmética, contrastándose con el término de su izquierda.
• Por ejemplo, la expresión '6 is 4+3.' es falsa. Por otra parte, si la expresión es 'X is4+3.', el resultado será la instanciación de X:
• X = 7• Una regla PROLOG puede ser esta:
• densidad(X,Y) :- población(X,P), área(X,A), Y is P/A.
Predicados
• Un predicado es la relación directa con unaexpresión. Cada predicado usado en unacláusula de Prolog debe ser declarado, basadoen la declaración de los tipos de dominiospara cada uno de los nombres de los objetos.
• paciente(nombre, edad, peso, presion_sanguínea).
• mercado(encargado, vendedor).
Estructuras
• Los objetos estructurados (o simplemente estructuras)son objetos que tienen varios componentes. Loscomponentes pueden ser a su vez estructuras. Porejemplo, la fecha, puede ser vista como una estructuracon 3 componentes: día, mes y año. Las estructurasson tratadas en el programa como objetos simples,aunque estén formadas por muchos componentes. Elorden en que se combinan los componentes dentro deun objeto simple, es la forma en que escogemos unafunctor. Un functor conveniente para nuestro ejemploes fecha. Entonces la fecha 1o. de Enero 1975 puedeescribirse:
• fecha(1, enero, 1975)
Interpretación de una Cláusula en Prolog
Entrada/Salida
• En Prolog la Entrada/Salida (E/S) se realizamediante efectos laterales. Los predicados deE/S tienen un escaso valor lógico, pero, al serencontrados por el sistema, ejecutan lasacciones correspondientes.
Predicado Efecto Lateral
write(X). Escribe el valor del término X
Read(Y). Lee un término Prolog
display(X) Escribe el valor del término Xen notación functor
nl Escribe un salto de línea
cuadrados:- repeat,leeNumero(X),procesa(X),!.
leeNumero(X):-repeat,write('Numero para finalizar digite 0?'),read(X),number(X),!.
procesa(0):- write('FIN DE PROGRAMA'),nl,!.procesa(X):- R is X*X,write([X, '^2 = ',R]),nl,fail.
repeat: Predicado que siempre se cumple y que tiene un infinito número de soluciones.,
cuadrados:-Solicita numeros al usuario hasta que éste teclea 0. Para cada número, imprime su cuadrado.
Los bucles Prolog con repeat tienen siempre un mismo esquema:bucle:- repeat,<cuerpo del bucle>,<condición de salida, si se cumple . fin>,!.El corte al final es necesario para que el predicado no intente re-ejecutarse de nuevo.
Entrada/Salida
Predicado Efecto Lateral
get0(X) Lee un caracter del teclado
get(X) Lee el siguiente caracterdistinto de blanco.
put(X) Escribe el caracter X
Acceso a la Base de DatosLos sistemas Prolog ofrecen la posibilidad de modificar en tiempo de ejecución elcontenido de la base de conocimiento.
Predicado Se cumple cuando: Efecto lateralasserta(T) Siempre Añade al principio de la base de conocimiento el término Tassertz(T) Siempre Añade al final de la base de conocimiento el término T.retract(T) Si T unifica con el término eliminado. Elimina de la base de conocimiento eltérmino T
MANEJO PARA ARCHIVOS:
see(File) La entrada actual ahora es File.
seeing(File) File se unifica con el nombre del archivo de
entrada actual
seen Cierra el archivo de entrada actual
tell(File) El archivo de salida actual es File
telling(File) File se unifica con el nombre del archivo de
salida actual
told Cierra el archivo de salida actual
pedro
mariateresa
elena
jorge
raquel
miguel
jose
juan
http://www.lpa.co.uk/
C:\Program Files\WIN-PROLOG 4
“Win-Prolog” ( lenguaje basado enel Prolog -Programación lógica-con predicados para la construcción de sistemas expertos, permite la creación y el manejo de ventanas enel entorno Windows)
Practica 1
• progenitor(clara,jose).
• progenitor(tomas, jose).
• progenitor(tomas,isabel).
• progenitor(jose, ana).
• progenitor(jose, patricia).
• progenitor(patricia,jaime).
Como ejecutar:
Base de Hechos
• Para demostrar si Clara es bisabuela de Jaime,utilizaríamos la siguiente conjunción deobjetivos:
?-progenitor(clara,X), progenitor(X,Y), progenitor(Y,jaime).
Cual es la Respuesta?
Si agregamos las siguientes reglas:
• abuelo(X,Y):- progenitor(X,Z), progenitor(Z,Y).
• tio(X,Y):- progenitor(Z,Y), progenitor(V,Z), progenitor(V,X).
Que responden las siguientes Preguntas?
• abuelo(clara,jaime).
• abuelo(clara,patrica).
• tio(isabel,ana).
• tio(ana,jaime).
Ejemplo 2:
• saludo:-nl,
write('Ingrese su nombre, por favor'),
tab(3),
read(Name),
nl,nl,
write('Hola '),nl,
write(Name),nl.
Ejemplo 3:
• X is 4+2, write(X),nl.
• start:-write('Escriba la expresion y punto'),
nl,
read(X), Y is X,
write('El valor de '),write(X),
write(' es '),nl,write(Y),nl.
Ejemplo 4
• hola :-write('Nombre: '), read(Nombre),
write('Primer Apellido: '), read(Apellido1),
write('Segundo Apellido: '), read(Apellido2), nl,
write('Hola '), write(Nombre), tab(1),
write(Apellido1), tab(1), write(Apellido2),nl.
Ejemplo 5
Ejercicios de Prolog 6
• Construir en prolog consultas complejas con losoperadores AND(,), OR(;) y NOT(not) de la siguienteforma:
legusta(pepe,pesca).legusta(maria,bailar).legusta(ana,pesca).legusta(pepe,musica).legusta(maria,musica).legusta(ana,bailar).
• Se pueden realizar las siguientes preguntas sobre la base de información:
¿Le gusta la música a Pepe y a Maria? :
?-legusta(pepe,musica),legusta(maria,musica).
¿Le gusta bailar a Pepe o a Maria le gusta la música?:
?-legusta(pepe,musica);legusta(maria,musica).
- ¿Le gusta bailar a Pepe y a Maria no le gusta la música?:
?-legusta(pepe,musica),not(legusta(maria,musica)).
Programa que imprime el cubo de un número Ejemplo 7• Código:
cubo:-write('dame un numero '),
read(X), % lee en numero
proceso(X).
proceso(alto):-!. % se detiene hasta que encuentra la palabra ‘alto’
proceso(X):-C is X*X*X, %multiplica el numero 3 veces
write('El cubo es '), % escribe oración
write(C), nl,cubo. % imprime el resultado y te pide otro número
• Consulta:
?- cubo.
Ejemplo 8Un programa en Prolog consiste de un conjunto de clausulas,donde cada clausula es, o un hecho o una regla acerca decomo puede inferirse alguna solución para los hechos dados.
%% Hechos
• varon(eduardo).
• varon(francisco).
• varon(luis).
• varon(mario).
• mujer(alicia).
• mujer(veronica).
• mujer(victoria).
• mujer(beatriz).
• padres(eduardo,francisco,victoria).
• padres(alicia,francisco,victoria).
• padres(luis,eduardo,veronica).
• padres(beatriz,alicia,mario).
• esposos(eduardo,veronica).
• esposos(mario,alicia).
• esposos(francisco,victoria).
%% Reglashermana(Ella,X) :- mujer(Ella),
padres(Ella,M,P),padres(X,M,P).
hermano(El,X) :- varon(El),padres(El,M,P), padres(X,M,P).
hijo(El,X) :- varon(El),padres(El,X,_).
hijo(El,X) :- varon(El),padres(El,_,X).
hija(Ella,X) :- mujer(Ella),padres(Ella,X,_).
hija(Ella,X) :- mujer(Ella),padres(Ella,_,X).
• Define las siguientes relaciones: sobrino,sobrina, cuñado o cuñada, abuelo abuela,primo o prima. Codifícala en Prolog, modifica elarchivo anterior.
• Justifique sus respuestas.
Practica 9 Prolog:
1.- Tenemos el siguiente conocimiento directo:• · Pedro padece gripe.• · Pedro padece hepatitis• · Juan padece hepatitis• · María padece gripe• · Carlos padece intoxicación• · La fiebre es síntoma de gripe• · El cansancio es síntoma de hepatitis• · La diarrea es síntoma de intoxicación• · El cansancio es síntoma de gripe• · La aspirina suprime la fiebre• · El Lomotil suprime la diarrea
• Además podemos aportar el siguiente conocimiento inferido
• Un fármaco alivia una enfermedad si la enfermedad tiene unsíntoma que sea suprimido por el fármaco.
• Una persona debería tomar un fármaco si padece unaenfermedad que sea aliviada por el fármaco.
• Construir un programa que refleje dicho conocimiento y permita resolver las siguientes cuestiones:
1) ¿Podemos conocer qué dolencia tiene Pedro? ¿Y María?2) ¿Quién padece gripe?3) ¿Qué síntomas tiene Pedro?4) ¿Quién padece diarrea?5) ¿Y quién está cansado?6) ¿Hay algún fármaco que alivie a Pedro?7) ¿Hay algún síntoma que compartan Juan y María?
Reglas en WinProlog
padece(pedro,gripe).padece(pedro,hepatitis).padece(juan,hepatitis).padece(maria,gripe)padece(carlos,intoxicacion).es_sintoma(fiebre,gripe).es_sintoma(cansancio,hepatitis).es_sintoma(diarrea,intoxicacion).suprime(aspirina,fiebre).suprime(lomotil,diarrea).alivia(Enfermedad,Farmaco):-
es_sintoma(Sintoma,Enfermedad),suprime(Farmaco,Sintoma).debe_tomar(Persona,Farmaco):-
padece(Persona,Enfermedad),alivia(Farmaco,Enfermedad).tiene(Persona,Sintoma):-
padece(Persona,Enfermedad),es_sintoma(Sintoma,Enfermedad).
Ejemplos 10
• Por ejemplo el conjunto de cláusulas para decir que “siX es catedrático entonces X es doctor” y “si (X esjefe_dpto) entonces (x es catedrático)” se codifica en
• PROLOG.• (1) catedratico(X) :-jefe(X).
• (2) doctor(X) :- catedratico(X).
• (3) catedratico("Ivan Gonzalez").
• (4) catedratico("Diana Cardona").
• (5) jefe("Angel Cruz").
• La regla (1) y (2) son reglas de producción y el resto sonaxiomas o hechos
Carga la siguiente base de datos de países con sus respectivas capitales.
:- dynamic capital_of/2. capital_of(suiza, berna). capital_of(chile, santiago). capital_of(eeuu, washington). capital_of(estados_unidos, washington). capital_of(italia, roma). capital_of(francia, paris). capital_of(austria, viena). capital_of(alemania, berlin). capital_of(espana, madrid). capital_of(peru, lima). capital_of(mexico, cuidad_de_mexico).
Ejemplos 10
• Veamos cómo un programa Prolog es capaz de aquirir nuevas cláusulas en tiempo de ejecución.– ?- capital_of(hawaii, X).
• Como puedes ver, no se pudo unificar la variable X. Ahora, prueba con– ?- listing.
• ¿Qué ocurre? . listing muestra todas las cláusulas que conforman el programa en memoria. Ahora prueba– ?- listing(capital_of).
• Ésto sólo muestra aquellas cláusulas asociadas al predicado indicado como parámetro.
• Se pueden incluir más cláusulas a la base de datosmediante el predicado assert/1:– ?- assert(capital_of(hawaii, honolulu)).
• Sin embargo, ésto sólo funciona para predicados que han sidomarcados como dínamicos mediante el predicado dynamic/1.
• Ahora, si preguntas por– ?- capital_of(hawaii, X).
• debiera resultar la unificación de la variable en forma exitosa.• ?- listing(capital_of).
Obsevemos que assert agrega la cláusula al final de lalista de predicados del mismo nombre. Existe tambienasserta/1 y assertz/1, que agregan la cláusula alcomienzo y al final respectivamente.
Prueba
• | ?- assert(hola).
yes
• | ?- listing(hola).
/* hola/0 */
• hola.
• Yes
• _____________________________________________
• retract/1 permite eliminar una cláusula de la base de datos.
?- retract(capital_of(hawaii, honolulu)).
Ejercicios Propuestos para ser entregados
• Predicado que eleve un número a un exponente
• Factorial de un número entero
• Par Impar y suma
Direcciones en Internet para su revisión:
• http://serdis.dis.ulpgc.es/~itis-pl/PL/Practica-1/Practica-1.html
En la siguiente dirección encontrara unprototipo de sistema Experto, y complementela base de conocimientos “restaurante 1.pl”.
Direcciones en Internet para su revisión:
• http://www.monografias.com/trabajos57/clasificacion-actividad-fisica/clasificacion-actividad-fisica2.shtml
En la siguiente dirección encontrara unprototipo de sistema Experto, analice lainformación consultada y corra el aplicativo.