1 1 Diego Darío Guerrero Almudena Bocinos Riobóo Almudena Bocinos Riobóo. Diego Darío Guerrero Fernández.
2 2 Diego Darío Guerrero Almudena Bocinos Riobóo INTRODUCCIÓN. FUNDAMENTOS. TIPOS DE CONSULTAS. TIPOS DE BÚSQUEDAS. CONCURRENCIA. BASES DE DATOS. PRIMITIVAS. EJEMPLOS en PARLOGW… INDICE
3 3 Diego Darío Guerrero Almudena Bocinos Riobóo Parlog es un lenguaje de programación lógica pensado para la resolución de problemas en máquinas con varios procesadores de forma concurrente. Su sintaxis es similar a PROLOG. Fue el resultado de las investigaciones realizadas en el Imperial College of Science and Technology de Londres por Steve Gregory en los años 1986 y 1987. INTRODUCCIÓN
4 4 Diego Darío Guerrero Almudena Bocinos Riobóo ParlogW dispone de compilación perezosa e incremental: Perezosa porque un método se compila justo antes de ser llamado. Incremental porque se compilan sólo los métodos que se hayan modificado. En ParlogW puede forzarse la compilación impaciente (eager) con “compile.” INTRODUCCIÓN
5 5 Diego Darío Guerrero Almudena Bocinos Riobóo Los programas Parlog se almacenan en ficheros, es recomendable dividir los programas en varios ficheros para aprovechar las características de compilación de Parlog. Para facilitar el manejo de programas con muchos ficheros, en parlogW se incorporan comandos para guardar y cargar “grupos de programas”. INTRODUCCIÓN
6 6 Diego Darío Guerrero Almudena Bocinos Riobóo Cada relación o predicado que tengamos debe tener una declaración “modo”, que determinará qué uso de una variable se va a hacer. mode cláusula( [nombre_var] modo ). cláusulas(argumentos). FUNDAMENTOS El nombre de variable es opcional. El modo: ? Representa Entrada ^ Representa Salida
7 7 Diego Darío Guerrero Almudena Bocinos Riobóo Preferible esta forma: mode cláusula( [nombre_var] modo ). cláusula(argumentos). Ejemplo de Declaración Ejemplos Sin nombre de variable: mode español(?). español(pepe). español(juan). Con nombre de variable: mode español(persona?). español(pepe). español(juan).
8 8 Diego Darío Guerrero Almudena Bocinos Riobóo Las consultas en parlogW se realizan de forma similar a prolog, especificando unos objetivos a alcanzar, parlog dará SI o NO dependiendo de si es alcanzado o no. Ej.:
9 9 Diego Darío Guerrero Almudena Bocinos Riobóo Vista normal: Con X,Y: obj1. mostramos los resultados de las variables X e Y tras ejecutar obj1. Vista Incremental: Con X,Y :: obj1. los resultados se mostrarán a medida que se van generando. Vista película: Con X,Y::: obj1. Vemos los resultados cuando se van generando, incluyendo variables sin ligar ( sin valores). La lista de variables a visualizar puede sustituirse por all si queremos que se vean todas las variables. MOSTRAR RESULTADOS
10 10 Diego Darío Guerrero Almudena Bocinos Riobóo
11 11 Diego Darío Guerrero Almudena Bocinos Riobóo
12 12 Diego Darío Guerrero Almudena Bocinos Riobóo amigo(‘Pepe’, [’Juan’,’Mari’,’Luis’]). amigo(‘Rosa', [‘Lara’,’Pili’,’Toni’]).
13 13 Diego Darío Guerrero Almudena Bocinos Riobóo ESTRATEGIA TEST-COMMIT-OUTPUT La resolución se realiza en tres fases: Test: Se comprueba cada cláusula que puede emparejar con argumento de entrada. Commit: Elegirá sólo una cláusula de las anteriores. OutPut: Se unificarán las variables de salida con el término encontrado en la cláusula elegida. MOTIVO DE LA INCOMPLETITUD
14 14 Diego Darío Guerrero Almudena Bocinos Riobóo OR-PARALELA: - mode amigo(?,?). amigo(‘Pepe’,’Juan’). amigo(‘Pepe’,’Mari’). amigo(‘Pepe’,’Luis’). TIPOS DE BÚSQUEDAS SECUENCIAL: - mode amigo(?,?). amigo(‘Pepe’,’Juan’); amigo(‘Pepe’,’Mari’); amigo(‘Pepe’,’Luis’). En este caso se obliga a parlog a realizar una búsqueda secuencial.
15 15 Diego Darío Guerrero Almudena Bocinos Riobóo TIPOS DE CONSULTAS mode enteros(desdeN?,hastaN?,resultado^). mode cuadrados(listaNumeros?,resultado^). X,Y : enteros(1,1000,X), cuadrados(X,Y). X,Y : enteros(1,1000,X) & cuadrados(X,Y). Proceso enteros Proceso cuadrados X 1 1.000 Y AND-PARALELA SECUENCIAL Variable Compartida
16 16 Diego Darío Guerrero Almudena Bocinos Riobóo Podemos comparar el comportamiento de la consulta and-paralela con la evaluación perezosa de Haskell. El mecanismo de consulta secuencial podría asemejarse a la evaluación impaciente. El esquema de procesos usados por Parlog recuerda a las redes de proceso que utiliza Haskell. COMPARATIVA CON HASKELL
17 17 Diego Darío Guerrero Almudena Bocinos Riobóo Haskell utiliza reducción de expresiones, mientras que Parlog utiliza resolución y unificación. Haskell está fuertemente tipificado, se definen los tipos de los parámetros, en Parlog no. Parlog permite usar los parámetros de entrada y salida en cualquier posición del predicado. En Haskell el tipo de parámetro de entrada y salida está determinado por su posición en la lista de parámetros. En haskell: funcion :: int int. El de salida es el ultimo entero. En parlog: funcion(int1^,int2?). Podemos poner primero el de salida y luego el de entrada. COMPARATIVA CON HASKELL
18 18 Diego Darío Guerrero Almudena Bocinos Riobóo EN HASKELL: primos=map head lprimos where lprimos = [2..] : map criba lprimos Criba(p:xs) = [x | x xs, p ‘noDivideA’ x] where m ‘noDivideA’ n = mod n m =/= 0. PRIMOS (Haskell) map head map criba : [2..] primos
19 19 Diego Darío Guerrero Almudena Bocinos Riobóo EN Parlog: mode primos(primos^). primos(Primos)
20 20 Diego Darío Guerrero Almudena Bocinos Riobóo mode dueño(matrícula↑,dnipersona?). dueño(’BBT4567’,’48029184T’). dueño(‘CAB2005’,’21259337E’). dueño(‘CEY9200’,’55621832M’). mode multa(matrícula?,importe↑). multa(’BBT4567’,’180€’). multa(‘CAB2005’,’500€’). multa(‘CEY9200’,’300€’). Ejemplo de Variable Compartida
21 21 Diego Darío Guerrero Almudena Bocinos Riobóo Con los operadores, y & podemos expresar cualquier situación de concurrencia.
22 22 Diego Darío Guerrero Almudena Bocinos Riobóo BASES DE DATOS. Solución a Incompletitud database pred/Aridad. pred(uno1, dos1,… A). pred(uno2, dos2,… A). … Otra solución más elaborada consiste en utilizar las capacidades de Bases de Datos que proporciona Parlog. Sobre esta definición, (que puede almacenarse en ficheros), podemos realizar consultas con set/3 y subset/3.
23 23 Diego Darío Guerrero Almudena Bocinos Riobóo BASES DE DATOS database amig/2. amig(pepe,miguel). amig(javier,jesus). amig(pepe,antonio). amig(paco,maria). set/3, subset/3: set(resultado^, term?, pred?). La diferencia entre set y subset es que este último se ejecuta de forma perezosa ( sólo devuelve los valores que se le piden) mientras que set busca todas las soluciones antes de terminar.
24 24 Diego Darío Guerrero Almudena Bocinos Riobóo Aritméticas: =:=/2, =\=/2, /2, = =/2. Unificación: =/2, unifica variables. ==/2, comprueba si unifican.
25 25 Diego Darío Guerrero Almudena Bocinos Riobóo PRIMITIVAS Chequeo de tipos (en ejecución): atom/1, integer/1, float/1, number/1, atomic/1. Escritura: ya vimos :, ::, ::: y :::: write/1, writeq/1: escriben un dato en la pantalla. display/1: muestra datos con la representación interna que tenga. nl/0: nueva línea. tab/1: tab(N?): escribe N espacios.
26 26 Diego Darío Guerrero Almudena Bocinos Riobóo read/1,char/1: lee un dato de la entrada del usuario. la primitiva read está implementada a muy alto nivel, con el inconveniente de que su ejecución bloquea todos los procesos parlog que se estén ejecutando. Key/1 : se bloquea el proceso que lo llama hasta que se pulsa una tecla o el ratón. No bloquea todos los procesos porque esta implementada a muy bajo nivel. PRIMITIVAS DE LECTURA
27 27 Diego Darío Guerrero Almudena Bocinos Riobóo Una mezcla de las dos nos proporciona un “read” que es capaz de no bloquear todos los procesos: PRIMITIVAS DE LECTURA mode achars(caracteres^). achars([Char|Chars])
28 28 Diego Darío Guerrero Almudena Bocinos Riobóo Ahora veremos algunos ejemplos completos en el entorno ParlogW: Representación y búsqueda en árboles. Ordenación QuickSort de listas. EJEMPLOS EN PARLOGW
29 29 Diego Darío Guerrero Almudena Bocinos Riobóo Programming in PARLOG. TOM CONLON – 1984 Razonando con Haskell para la comparativa con Parlog. HANDS ON PARLOG FOR WINDOWS 1.0 - 1995 PARLOG: paralelismo en programación lógica de Pilar Bruis Gómez PARLOGW: intérprete de parlog. 1995 Si quieres más sobre P.L. Concurrentes: Animación Automática de Especificaciones OASIS utilizando Programación Lógica Concurrente. Tésis de Patricio Orlando Letelier Torres. U. Valencia. BIBLIOGRAFIA y MATERIAL