prolog

Programación Lógica                             1 Introducción al lenguaje PROLOG 1.0 Lenguaje Procedural vs Lenguaje 

Views 217 Downloads 3 File size 141KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Programación Lógica 

                          

1 Introducción al lenguaje PROLOG 1.0 Lenguaje Procedural vs Lenguaje Declarativo    • El  Lenguaje  procedural  permite  al  programador  decirle  a  la  computadora    lo  que  tiene  que  hacer,  paso  a    paso,  procedimiento  por  procedimiento,  hasta  alcanzar  una conclusión o ejecutar una función.  Ejemplo: Ingreso de Clientes    • Prolog es declarativo, se declara la situación con la que quiere trabajar y a donde  quiere  ir.  El  propio  lenguaje  realiza  el  trabajo  de  decidir  como  alcanzar  dicho  objetivo.   Ejemplo: Quien es el abuelo de Carlos? 

1.1 Generalidades  Prolog es un lenguaje de programación que se utiliza para resolver problemas que existen  entre objetos y relaciones. La programación en Prolog  consiste simplemente en:  • declarar hechos sobre los objetos y sus relaciones,  • definir reglas sobre dichos objetos y relaciones, y  • hacer preguntas.    Prolog es un lenguaje de programación declarativa (coloquial), lo cual quiere decir que el  computador y el programador sostienen una especie de conversación. Prolog espera a que  se ingrese hechos y las reglas que definen el problema a resolver.     Una recomendación, Prolog es diferente a cualquier otro lenguaje de bajo o alto nivel, por  tanto, nunca  resolver un problema en otro lenguaje para luego traducirlo a Prolog.     Objetos y Relaciones    Un  objeto  puede  ser  cualquier  cosa  que  pueda  representarse  simbólicamente  en  una  computadora:   león   tigre   puma   papa  

Ing. Saúl Pérez Vega 

PRACTICA 01 

1   

Programación Lógica 

                          

camote  lechuga  oro   plata    Y las relaciones son:    animal  vegetal  mineral   

1.2 Los Hechos    Un hecho es una relación entre objetos.     Sintaxis:  

  relacion (objeto, objeto, ...)    La relación se conoce como el predicado y los objetos como los argumentos.  Los siguientes puntos son importantes:  • Los nombres de las relaciones deben comenzar con una letra minúscula.  • Los objetos se escriben separados por comas y encerrados entre paréntesis.  • Al final del hecho debe de ir un punto.    Por ejemplo:  

  animal(leon).  vegetal(papa).  mineral(oro). 

  1.3 Las Reglas    Cuando  la  verdad  de  un  hecho  depende  de  la  verdad  de  otro  hecho  o  de  un  grupo  de  hechos se usa una regla. Una regla consiste en una cabeza y un cuerpo. El cuerpo puede  estar formado por varios hechos u objetivos.    

Ing. Saúl Pérez Vega 

PRACTICA 01 

2   

Programación Lógica 

                          

Sintaxis:   

cabeza :‐ objetivo 1, objetivo 2, ..., objetivo n.    Los objetivos van separados por comas, especificando conjunción y al final debe de ir un  punto. Por ejemplo, una regla es   

Mayor_de_edad(X) :‐ persona(X,E), E>18.    1.4 Las variables    Las  variables  se  utilizan  para  describir  hechos  y  reglas  generales.  Los  nombres  de  las  variables deben comenzar con letra mayúscula o con el carácter (Edad, E).    

1.5 La estructura de un programa en PROLOG    La mayoría de los programas en Prolog están organizados en cuatro secciones principales:  • domains  • predicates  • clauses  • goal   

Sección de constantes  En la sección de constantes podemos declarar constantes simbólicas que pueden usarse  en  el  cuerpo  del  programa.  La  utilidad  de  las  constantes  en  Visual  Prolog  es  similar  a  la  que  estos  elementos  tienen  en  otros  lenguajes  de  programación,  normalmente,  sirven  para facilitar el uso de diversas cantidades, expresiones y símbolos.  La  definición  de  la  sección  de  constantes  se  encabeza  con  la  palabra  reservada  CONSTANTS, y cada línea de definición es de la forma  = .  Por ejemplo, el siguiente fragmento de programa:   

Ing. Saúl Pérez Vega 

PRACTICA 01 

3   

Programación Lógica 

                          

CONSTANTS  numero = 1  expresion = 1+1    GOAL  A=numero, B=expresion, write(A), write(B), nl.     Resultado  12  A=1, B=2  1 Solution    Las restricciones que se imponen en el uso de constantes se exponen a continuación:  • El sistema no distingue entre mayúsculas y minúsculas.   • La  definición  de  una  constante  no  puede  referirse  a  sí  misma,  es  decir,  no  es  posible construir definiciones recursivas de constantes.   • Puede  haber  varias  secciones  CONSTANTS  a  lo  largo  del  programa,  y  toda  constante debe ser definida antes de ser utilizada.   • Las  constantes  declaradas  son  efectivas  desde  el  punto  en  que  son  declaradas  hasta  el  final  del  fichero  fuente  donde  han  sido  definidas  y  en  algunos  ficheros  incluidos tras la declaración.   • Las constantes sólo se pueden declarar una vez.    

Sección de dominios  En  la  sección  DOMAINS  se  pueden  definir  dominios  no  especificados  por  defecto  por  Visual  Prolog.  Por  ejemplo,  el  dominio  integer  es  estándar  para  el  compilador,  no  así  el  dominio sinónimo ENTERO o dominios complejos. En estos últimos casos, el programador  debe definirlo en esta sección.  Dominios Stántard  •  char, carácter encerrado entre apostrofes (comillas simples)    ('a', 'b', 'c')  •  Integer, Enteros  desde  ‐2147483648 hasta 2147483647  •  Real,  Número  con  punto  flotante  equivalente  al  doublé.  El  rango  permitido  es  1*10^‐307 hasta 1*10^+308 

Ing. Saúl Pérez Vega 

PRACTICA 01 

4   

Programación Lógica 

                          

• •

 String,  Referidos  a  una  secuencia  de  caracteres  escritos  entre  comillas.  Ejemplo:  “Pedro Arce”.  Symbol similar al String 

Cada sección de dominios debe comenzar con la palabra DOMAINS. Ejemplo:  DOMAINS   ENTERO = INTEGER    Es posible usar 5 formatos de declaraciones para dominios definidos por el usuario.  Dominios de Objetos Compuestos  El formato es como sigue: 

dominio = [reference] [align {byte|word|dword}] declaracion1;[declaracion2];...  • •

• •

dominio: nombre dado al dominio especificado por el usuario.   declaracion1; [declaracion2]: declaración de objetos compuestos alternativos que  tienen que tener la forma siguiente: functor([sub_1 [, sub_2, ...] ]) donde   o functor es el nombre del objeto compuesto alternativo.   o sub_1  [,sub_2,  ...]  son  subcomponentes  del  objeto  compuesto  que  deben  tener  su  correspondiente  nombre  y  dominio.  Este  último  puede  ser  estándar o definido por el usuario.   reference:  indica  la  declaración  de  un  dominio  de  referencia.  En  este  tipo  de  dominios los argumentos de entrada pueden ser variables libres.   align: indica el tipo de distribución de memoria que se va a usar.  

En  predicates  se  declaran  todos  los  predicados  no  predefinidos  que  se  utilizarán  en  la  sección clauses. Los hechos y las reglas se escriben en la sección clauses.    Como  nuestro  Prolog  puede  usarse  de  forma  interactiva,  es  frecuente  ejecutar  un  programa y luego esperar a que se nos pregunte el objetivo. La sección goal nos permite  ejecutar  los  programas  de  una  forma  no  interactiva,  y  por  tanto,  buscará  la  solución  deseada tan pronto como se ejecute el programa.    goal  write("Hola"),nl,  write("Lenguaje: Prolog"),  nl.   

Ing. Saúl Pérez Vega 

PRACTICA 01 

5   

Programación Lógica 

                          

1.6 Ejercicios  1.6.1 Ejercicio01 

Test Goal  Mode 

 

   

Es el resultado de ejecutar el  programa. 

Añadir 5 alumnos y ejecutar    1.6.2 Ejercicio02  predicates    le_gusta(symbol,symbol) ‐ nondeterm(o,o)     clauses    le_gusta(alexander,natacion).      le_gusta(tatiana,tenis).      le_gusta(franz,tenis).      le_gusta(jahayra,natacion).     le_gusta(maria_del_pilar,esgrima).     le_gusta(rudy_fritz,ajedrez). 

Ing. Saúl Pérez Vega 

 

PRACTICA 01 

6   

Programación Lógica 

                          

  le_gusta(katty,natacion).    le_gusta(katiuska,natacion).    le_gusta(harry,ajedrez).    Le_gusta(cristobal,Deporte) if          goal    write("Listado del programa"),nl,   % le gusta a Tatiana el tenis?    le_gusta(tatiana,tenis).     % a que persona le gusta un deporte   % le_gusta(Persona,Deporte).        %que deporte le gusta a tatiana    %write("A Tatiana le gusta el"),nl,le_gusta(tatiana,Deporte).            %que deportes les gusta a tatiana y harry    %write("tatiana y harry practican"),nl,    %le_gusta(tatiana,Deporte) or le_gusta(harry,Deporte).          %a quienes les gusta el tenis o el ajedrez    %le_gusta(Persona,tenis) or le_gusta(Persona,ajedrez).    1.6.3 Ejercicio03  predicates    numero_telefonico(symbol,symbol) ‐ nondeterm (i,o)    clauses    numero_telefonico("Alberto","9555‐3665").    numero_telefonico("Betty","9755‐5233").    numero_telefonico("Karola","9941‐1010").    numero_telefonico("Damian","9954‐8400").    goal    numero_telefonico("Karola",Number).       

Ing. Saúl Pérez Vega 

PRACTICA 01 

7   

Programación Lógica 

                          

1.6.4 Ejercicio04  predicates    es_una_letra(char) ‐ nondeterm (i)    clauses    es_una_letra(Ch):‐    'a' El murciélago es vegetal o animal?  (v) Escribe todos los animales.    1.7.2 Una agencia matrimonial    Una agencia matrimonial tiene una lista de candidatos al matrimonio organizado según las  declaraciones siguientes:    hombre(N,A,C,E)  mujer(N,A,C,E)   

Ing. Saúl Pérez Vega 

PRACTICA 01 

8   

Programación Lógica 

                          

donde:  N es el nombre de un hombre o una mujer,  A su altura (alta, media, baja),  C el  color de su cabello (rubio, castaño, pelirrojo, negro) y E su edad (joven, adulta, madura).    gusta(N,M,L,S)    indica que a la persona N le gusta el género de música M (clásica, pop, jazz), el género de  literatura  L (aventura, ciencia ficción, policíaca ), y practica el deporte  D (tenis, natación,  jogging).    busca(N,A,C,E)    expresa que la persona N busca una pareja de altura A, con cabello de color C y edad E.    Se considera que dos personas X e Y de sexos diferentes son adecuadas si X conviene a Y  e  Y  conviene  a  X.  Se  dice  que  X  conviene  a  Y,  si  X  conviene  físicamente  a  Y  (la  altura,  edad,  y  cabello  de  X  son  las  que  busca  Y),  y  si  además,  los  gustos  de  X  e  Y  en  música,  literatura y deporte coinciden.    (i) Escribe un conjunto de declaraciones que representen el listado de candidatos.  (ii) Escribe las reglas:  • conviene_fisicamente(X,Y)  • tiene_igual_gusto(X,Y)  (iii) Listar las parejas que son adecuadas por afinidad.    1.7.3 Una agencia de viajes    Una  agencia  de  viajes  propone  a  sus  clientes  viajes  de  una  semana  a  Roma,  Londres  o  Alemania. El catalogo de la agencia contiene, para cada destino, el precio del transporte y  el precio de una semana de estancia que varía según el destino y el nivel de comodidad  elegidos: hotel, hostal o camping.  (i) Escribe el conjunto de declaraciones que describen este catalogo (los precios se dejan a  tu elección).  (ii) Expresa la relación viaje(c,s,h,p) que se interpreta como: el viaje a  la ciudad c durante s semanas con estancia en h cuesta d dolares.  (iii) Completa con viaje economico(c,s,h,p,p max) que expresa que el costo p es menor que  p max dolares.   

Ing. Saúl Pérez Vega 

PRACTICA 01 

9