Programación Internet con Lenguajes Declarativos Multiparadigma. PARTE I: Fundamentos

Documentos relacionados
Algoritmos y programas. Algoritmos y Estructuras de Datos I

1. Computadores y programación

Inteligencia en Redes de Comunicaciones. Razonamiento lógico. Julio Villena Román.

Métodos de Inteligencia Artificial

2.2 Nombres, Ligado y Ámbito

Tema 3.- Predicados y sentencias condicionales

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Lenguajes de programación Última modificación 2008/10

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Programación Declarativa

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Elementos de un programa en C

Apuntadores en C y C++

Fundamentos de Programación 2017-I

Programación Estructurada

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Instituto Politécnico Nacional

Nociones Básicas de Sémantica: Semántica Denotacional

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Apuntadores (Punteros)

Introducción al Lenguaje de Programación C

Java para no Programadores

Guía práctica de estudio 05: Diagramas de flujo

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Estructuras de Decisión Simples y Dobles

Programación. Test Autoevaluación Tema 3

Tema 7. El sistema de clases

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

PROGRAMACIÓN LÓGICA INTRODUCCIÓN. Juan Juárez Fuentes

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

DES: Programa(s) Educativo(s): Tipo de materia: Clave de la materia: Semestre: Área en plan de estudios:

Universidad de Managua

Estructuras de Repetición (Repita para)

by Tim Tran:

Introducción al lenguaje C

FUNCIONAMIENTO DEL ORDENADOR

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Actividad de Evaluación Brandon Emmanuelle Cuevas Rangel GPO: 303 Carrera: Informática 3er Semestre Joel Rocha Barocio Cienega de Flores N.L.

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA FACULTAD DE CIENCIAS PROGRAMA DE MATEMÁTICAS PLAN DE ESTUDIOS

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

TEMA 4. ESTRUCTURAS DE CONTROL

Lenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados

Lenguajes de programación

Lenguaje de programación C. Introducción

El lenguaje C. 1. Identificadores, constantes y variables

PHP: Lenguaje de programación

Tema 2 Introducción a la Programación en C.

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas

C# para no Programadores

Algoritmos y Programas

Java para programadores

Misión Sucre P.N.F. de Informática U.C.: Algoritmia y Programación. Elaborado por: Ing. Víctor Valencia

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Guía práctica de estudio 03: Algoritmos

Contenido. Capítulo 1. Introducción a lenguaje C 1

CAPITULO ALGORITMOS Y PROGRAMAS CONTENIDO

Funciones como Subprogramas en C++

Unidad I: Tipo de Dato Abstracto (TDA)

1. Cuestiones. Ejercicios resueltos de C. Diego Rodríguez-Losada 1. //a) #include <stdio.h> main( ) { int x = 0, y = 0; //b) #include <stdio.

UN TIPO ABSTRACTO DE DATOS POLINOMIO EN C++

PR1: Programación I 6 Fb Sistemas Lógicos 6 Obligatoria IC: Introducción a los computadores 6 Fb Administración de

Tipos Abstractos de Datos

Estructuras de control

Tema V Generación de Código

Conceptos de Programación Orientada a Objetos

ESCUELA DE INFORMÁTICA

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE

PROGRAMA de Organización de Computadoras

Estructuras de Repetición (Hacer-Mientras)

PROGRAMACION ORIENTADA A OBJETOS EN C++

INDICE. XVII Prólogo a la edición en español. XXI 1. Calculo proporcional 1.1. Argumentos y proporciones lógicas

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

TIPOS DE DATOS BASICOS EN LENGUAJE C

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Algoritmos y Lenguajes de Programación

LÓGICA DE PROGRAMACIÓN

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Tema 7. Generación de código

Estructuras en LabVIEW.

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Fundamentos de Informática E.U.P. Universidad de Sevilla

Programación En Lenguaje C

FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA DE SISTEMAS. Horas Contacto. Objetivos

FUNDAMENTOS DE INFORMÁTICA

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Métodos, Algoritmos y Herramientas

Tema 1 Programación Funcional

Habilidades Digitales Matemáticas para secundaria

Resultado de Aprendizaje:

Programación estructurada (Introducción a lenguaje C)

Lenguajes y Gramáticas

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Transcripción:

Curso de Doctorado: Programación Internet con Lenguajes Multiparadigma. PARTE I: Fundamentos Pascual Julián Iranzo Pascual.Julian@uclm.es Universidad de Castilla La Mancha. Departamento de Informática. Lenguajes Multiparadigma p.1/40

Lenguajes Integrados Multiparadigma: Fundamentos Indice Introducción. 2.- Sistemas ecuacionales. 3.- Sistemas de reescritura de términos. 4.- Narrowing, estrategias de narrowing y residuación. Lenguajes Multiparadigma p.2/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los computadores modernos presentan una organización y funcionamiento basado en el modelo de von Neumann. Conduce a un modelo de cómputo en el que: Los procesadores ejecutan las intrucciones secuencialmente = Lenguajes difíciles de paralelizar. Lenguajes Multiparadigma p.3/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los computadores modernos presentan una organización y funcionamiento basado en el modelo de von Neumann. Conduce a un modelo de cómputo en el que: Hay una separación entre el tipo de informaciones que almacena la MC (instrucciones / datos) = repercusión sobre el diseño de estos lenguajes. Lenguajes Multiparadigma p.3/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los computadores modernos presentan una organización y funcionamiento basado en el modelo de von Neumann. Conduce a un modelo de cómputo en el que: Se introduce el concepto de estado de la computación (registros de la UCP + MC como un conjunto de palabras). Lenguajes Multiparadigma p.3/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los recursos expresivos de los lenguajes imperativos pueden verse como abstracciones de los componentes de la máquina de von Neumann o de sus operaciones elementales: variables celdas de la MC / registros Lenguajes Multiparadigma p.4/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los recursos expresivos de los lenguajes imperativos pueden verse como abstracciones de los componentes de la máquina de von Neumann o de sus operaciones elementales: registro (o estructura) / arrray conjunto contiguo de celdas de la MC Lenguajes Multiparadigma p.4/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los recursos expresivos de los lenguajes imperativos pueden verse como abstracciones de los componentes de la máquina de von Neumann o de sus operaciones elementales: nombres de variables direcciones de celdas de la MC / registros Lenguajes Multiparadigma p.4/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los recursos expresivos de los lenguajes imperativos pueden verse como abstracciones de los componentes de la máquina de von Neumann o de sus operaciones elementales: instrucciones de control intrucciones de salto condicional o incondicional del lenguaje máquina Lenguajes Multiparadigma p.4/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos Los recursos expresivos de los lenguajes imperativos pueden verse como abstracciones de los componentes de la máquina de von Neumann o de sus operaciones elementales: instrucción de asignación intrucciones LOAD+STORE o MOVE del lenguaje máquina Lenguajes Multiparadigma p.4/40

Lenguajes Imperativos vs. Computadores y Lenguajes Imperativos La instrucción de asignación resulta ser representativa del cuello de botella de von Neumann y nos obliga a pensar en términos de trasiego de información entre celdas de memoria. la instrucción de asignación separa la programación en dos mundos: Expresiones / Instrucciones. direcciones = expresión. Lenguajes Multiparadigma p.5/40

Lenguajes Imperativos vs. Características de los Lenguajes Imperativos (Resumen) PROGRAMA INSTRUCCIONES Transcripción de un algoritmo Instrucciones máquina MODELO CÓMPUTO VARIABLES DE Máquina de estados Referencias a memoria Lenguajes Multiparadigma p.6/40

Lenguajes Imperativos vs. Programación Imperativa algoritmos + estructuras de datos = programas [Wirth] Ejemplo: Concatenación de dos listas. Lenguajes Multiparadigma p.7/40

Lenguajes Imperativos vs. Programación Imperativa #include <stdio.h> #include <stdlib.h> typedef struct nodo { char dato; struct nodo *enlace; } LISTA; void mostrar(lista *ptr); void insertar(lista **ptr, char elemento); LISTA *crear_lista(); LISTA *concatenar(lista *ptr1, LISTA *ptr2); Lenguajes Multiparadigma p.8/40

Lenguajes Imperativos vs. Programación Imperativa void main() { LISTA *l1, *l2, *lis = NULL; l1 = crear_lista(); l2 = crear_lista(); lis = concatenar(l1, l2); printf("\n La nueva lista enlazada es: "); mostrar(lis); } Lenguajes Multiparadigma p.9/40

Lenguajes Imperativos vs. Programación Imperativa void mostrar(lista *ptr) { while(ptr!= NULL) { printf(" %c",ptr->dato); ptr = ptr->enlace; } printf("\n"); } Lenguajes Multiparadigma p.9/40

Lenguajes Imperativos vs. Programación Imperativa void insertar(lista **ptr, char elemento) { LISTA *p1, *p2; p1 = *ptr; if (p1 == NULL) { p1 = malloc(sizeof(lista)); if (p1!= NULL) { p1->dato = elemento; p1->enlace = NULL; *ptr = p1; } } else {... } } Lenguajes Multiparadigma p.9/40

Lenguajes Imperativos vs. Programación Imperativa LISTA *crear_lista() { LISTA *lis = NULL; char elemento; printf("\n Introduzca elementos: "); do { elemento = getchar(); if(elemento!= \n ) insertar(&lis, elemento); } while(elemento!= \n ); return lis; } Lenguajes Multiparadigma p.9/40

Lenguajes Imperativos vs. Programación Imperativa LISTA *concatenar(lista *ptr1, LISTA *ptr2) { LISTA *p1; p1 = ptr1; while(p1->enlace!= NULL) p1 = p1->enlace; p1->enlace = ptr2; return ptr1; } Lenguajes Multiparadigma p.9/40

Lenguajes Imperativos vs. Programación Imperativa Este programa ilustra las características de los lenguajes imperativos: Es una secuencia de instrucciones que son ordenes a la máquina que operan sobre un estado no explícitamente declarado. Lenguajes Multiparadigma p.10/40

Lenguajes Imperativos vs. Programación Imperativa Este programa ilustra las características de los lenguajes imperativos: Para entender el programa debemos ejecutarlo mentalmente (cómo cambian los contenidos de las variables y otras estructuras en la MC). Lenguajes Multiparadigma p.10/40

Lenguajes Imperativos vs. Programación Imperativa Este programa ilustra las características de los lenguajes imperativos: Es necesario gestionar explícitamen la MC (llamada al sistema malloc() + variables de tipo puntero). Lenguajes Multiparadigma p.10/40

Lenguajes Imperativos vs. Programación Imperativa Este programa ilustra las características de los lenguajes imperativos: Rigidez (sólo concatena listas de caracteres). Lenguajes Multiparadigma p.10/40

Lenguajes Imperativos vs. Programación Imperativa Este programa ilustra las características de los lenguajes imperativos: La lógica y el control están mezclados, lo que dificulta la verificación formal del programa. Lenguajes Multiparadigma p.10/40

Lenguajes Imperativos vs. Lenguajes Uso de una cierta lógica como lenguaje de programación: Un programa es un conjunto de fórmulas lógicas que resultan ser la especificación del problema que se pretende resolver, y la computación se entiende como una forma de inferencia o deducción en dicha lógica. Lenguajes Multiparadigma p.11/40

Lenguajes Imperativos vs. Lenguajes Los principales requisitos que debe cumplir la lógica empleada son: disponer de un lenguaje que sea suficientemente expresivo; disponer de una semántica operacional (un mecanismo de cómputo que permita ejecutar los programas); Lenguajes Multiparadigma p.12/40

Lenguajes Imperativos vs. Lenguajes Los principales requisitos que debe cumplir la lógica empleada son: disponer de una semántica declarativa que permita dar un significado a los programas de forma independiente a su posible ejecución; resultados de corrección y completitud. Lenguajes Multiparadigma p.12/40

Lenguajes Imperativos vs. Características de los Lenguajes (Resumen) PROGRAMA INSTRUCCIONES Especificación de un problema fórmulas lógicas MODELO CÓMPUTO VARIABLES DE Inferencias lógicas Variables lógicas Lenguajes Multiparadigma p.13/40

Lenguajes Imperativos vs. Programación Declarativa El programador especifica qué debe computarse más bien que cómo deben realizarse los cómputos. programa = lógica + control [Kowalski] Lenguajes Multiparadigma p.14/40

Lenguajes Imperativos vs. Programación Declarativa El componente lógico determina el significado del programa mientras que el componente de control solamente afecta a su eficiencia. la tarea de programar consiste en centrar la atención en la lógica dejando de lado el control al sistema. Lenguajes Multiparadigma p.15/40

Lenguajes Imperativos vs. Ventajas de la Programación Declarativa Estilo de programación de muy alto nivel y control automático. Mayor poder expresivo. Mayor productividad, programas más pequeños y fáciles de mantener. Lenguajes Multiparadigma p.16/40

Programación Declarativa Programación Lógica Se basa en (fragmentos de) la lógica de predicados: lógica de cláusulas de Horn (HCL). Define relaciones mediante cláusulas A B 1... B 2 (implicaciones) Lenguajes Multiparadigma p.17/40

Programación Declarativa Programación Lógica: Ejemplo Concatenación de dos listas. app([ ], X, X) app([x X s ], Y, [X Z s ]) app(x s, Y, Z s ) Lenguajes Multiparadigma p.18/40

Programación Declarativa Programación Lógica: Ejemplo Concatenación de dos listas. app([ ], X, X) app([x X s ], Y, [X Z s ]) app(x s, Y, Z s ) Lectura declarativa: La concatenación de la lista vacía [ ] y otra lista X es la propia lista X. Lenguajes Multiparadigma p.18/40

Programación Declarativa Programación Lógica: Ejemplo Concatenación de dos listas. app([ ], X, X) app([x X s ], Y, [X Z s ]) app(x s, Y, Z s ) Lectura declarativa: La concatenación de [X X s ] e Y es la lista que resulta de añadir el primer elemento X de [X X s ] a Z s, si Z s es la concatenación de X s e Y. Lenguajes Multiparadigma p.18/40

Programación Declarativa Programación Lógica: Ejemplo Concatenación de dos listas. app([ ], X, X) app([x X s ], Y, [X Z s ]) app(x s, Y, Z s ) Lectura operacional: Para concatenar dos listas [X X s ] e Y primero es preciso resolver el problema de concatenar el resto X s de la primera lista, a la segunda Y. Lenguajes Multiparadigma p.18/40

Programación Declarativa Programación Lógica: Ejemplo Concatenación de dos listas. app([ ], X, X) app([x X s ], Y, [X Z s ]) app(x s, Y, Z s ) Lectura operacional: La concatenación de la lista vacía [ ] y otra lista X es un problema ya resuelto. Lenguajes Multiparadigma p.18/40

Programación Declarativa Programación Lógica: Ejemplo Principales características de este programa: Gestión automática de la memoria Mecanismo de cómputo que permite una búsqueda indeterminista (built-in search) de soluciones: Lenguajes Multiparadigma p.19/40

Programación Declarativa Programación Lógica: Ejemplo Principales características de este programa: Gestión automática de la memoria Mecanismo de cómputo que permite una búsqueda indeterminista (built-in search) de soluciones: Responde a diferentes objetivos (sin necesidad de efectuar ningún cambio en el programa), Lenguajes Multiparadigma p.19/40

Programación Declarativa Programación Lógica: Ejemplo Principales características de este programa: Gestión automática de la memoria Mecanismo de cómputo que permite una búsqueda indeterminista (built-in search) de soluciones: Computa con datos parcialmente definidos, Lenguajes Multiparadigma p.19/40

Programación Declarativa Programación Lógica: Ejemplo Principales características de este programa: Gestión automática de la memoria Mecanismo de cómputo que permite una búsqueda indeterminista (built-in search) de soluciones: Relación de entrada/salida no está fijada de antemano. Lenguajes Multiparadigma p.19/40

Programación Declarativa Programación Lógica: Semántica operacional Resolución SLD (regla de computación ϕ) (G Q 1 A Q 2 ), ϕ(g)=a, C (A Q) <Π, σ =mgu(a,a ) σ G = SLD σ(q 1 Q Q 2 ) Procedimiento de prueba por refutación SLD: regla de computación + regla de ordenación + regla búsqueda. Lenguajes Multiparadigma p.20/40

Programación Declarativa Programación Funcional Se basa en el concepto de función (matemática) y su definición mediante ecuaciones, que constituyen el programa. Computación = reducción determinista de expresiones (funcionales) para obtener un valor. Aproximaciones: ecuacional; algebraica; λ-cálculo. Lenguajes Multiparadigma p.21/40

Programación Declarativa Programación Funcional: Ejemplo Concatenación de dos listas. data [t] = [ ] [t : [t]] app :: [t] [t] [t] app [ ] x = x app (x : x s ) y = x : (app x s y) Lenguajes Multiparadigma p.22/40

Programación Declarativa Programación Funcional: Ejemplo Principales características de este programa: Necesidad de fijar el perfil de la función (dominio + rango) = idea de tipo de datos [Lenguajes fuertemente basados en tipos] Se ha declarado la estructura de datos lista: Lenguajes Multiparadigma p.23/40

Programación Declarativa Programación Funcional: Ejemplo Principales características de este programa: Necesidad de fijar el perfil de la función (dominio + rango) = idea de tipo de datos [Lenguajes fuertemente basados en tipos] Se ha declarado la estructura de datos lista: [ ] y : son los constructores del tipo Lenguajes Multiparadigma p.23/40

Programación Declarativa Programación Funcional: Ejemplo Principales características de este programa: Necesidad de fijar el perfil de la función (dominio + rango) = idea de tipo de datos [Lenguajes fuertemente basados en tipos] Se ha declarado la estructura de datos lista: t es una variable de tipo = Polimorfismo Lenguajes Multiparadigma p.23/40

Programación Declarativa Programación Funcional: Otras características de las funciones (matemáticas) Transparencia referencial: la salida viene determinado exclusivamente por la entrada. = No efectos laterales; Permite el razonamiento ecuacional (substitución de iguales por iguales); Cómputos deterministas. Lenguajes Multiparadigma p.24/40

Programación Declarativa Programación Funcional: Otras características de las funciones (matemáticas) Composición de funciones: Permite la construcción de programas mediante el empleo de funciones primitivas o previamente definidas por el usuario; Refuerza la modularidad de los programas. Lenguajes Multiparadigma p.25/40

Programación Declarativa Programación Funcional: Orden superior Empleo de las funciones como ciudadados de primera clase. Ejemplo: Funciones de Curry (+) :: Integer Integer Integer > 2 + 3 5 (El resultado es un Integer) Lenguajes Multiparadigma p.26/40

Programación Declarativa Programación Funcional: Orden superior Empleo de las funciones como ciudadados de primera clase. Ejemplo: Funciones de Curry (+) :: Integer Integer Integer > (2 +) E xpression : (2+) Of type : Integer Integer (El resultado es una funció Lenguajes Multiparadigma p.26/40

Programación Declarativa Programación Funcional: Orden superior Empleo de las funciones como ciudadados de primera clase. Ejemplo: Las funciones se pueden pasar como argumentos map :: (t 1 t 2 ) [t 1 ] [t 2 ] map f [ ] = [ ] map f (x : x s ) = (f x) : (map f x s ) Lenguajes Multiparadigma p.26/40

Programación Declarativa Programación Funcional: Semántica operacional β reducción (aproximación clásica: λ cálculo) (λx.λy. + x y) 3 2 β (λy. + 3 y) 2 β + 3 2 δ 5 Estrategias de evaluación: función de selección para redexes: leftmost vs. rightmost; innermost vs. outermost. orden aplicativo (voraz, call by value): leftmost innermost. orden normal (perezosa, call by name): leftmost outermost. Lenguajes Multiparadigma p.27/40

Programación Declarativa Programación Funcional: Semántica operacional Reescritura (aproximación algebraica) (l = r) < Π, ( p)( σ).σ(l) = t p t σ t[σ(r)] p Estrategias de evaluación: función de selección para redexes: leftmost vs. rightmost; innermost vs. outermost. leftmost innermost; leftmost outermost; parallel outermost;... Lenguajes Multiparadigma p.28/40

Programación Declarativa Programación Lógica vs. Funcional: Diferencias Programación Lógica PROGRAMA: Conjunto de cláusulas que definen relaciones Programación Funcional PROGRAMA: Conjunto de ecuaciones que definen funciones. SEMÁNTICA OPERACIONAL: Resolución SLD (unificación) SEMÁNTICA OPERACIONAL: Reducción (ajuste de patrones) SEMÁNTICA DECLARATIVA: Teoría de modelos (Modelo mínimo) SEMÁNTICA DECLARATIVA: Algebraica (Algebra inicial) / Denotacional Lenguajes Multiparadigma p.29/40

Programación Declarativa Programación Lógica vs. Funcional: Diferencias Primer orden Indeterminismo; Variables lógicas; Datos parcialmente especificados; E/S adireccional Sin tipos No estructuras infinitas No evaluación perezosa Orden superior Determinismo; Sin variables lógicas; Datos completamente especificados; E/S direccional Tipos y polimorfismo Estructuras infinitas Evaluación perezosa Lenguajes Multiparadigma p.29/40

Programación Declarativa Ventajas de los Lenguajes Funcionales respecto a los Lógicos Funciones de orden superior mejor abstracción mejor modularización Evaluación eficiente reducción determinista evaluación perezosa Lenguajes Multiparadigma p.30/40

Programación Declarativa Ventajas de los Lenguajes Lógicos respecto a los Funcionales Búsqueda de soluciones indeterminista. Mayor potencia expresiva (e.g. variables extra; información parcial; inversibilidad). Aplicaciones en investigación operativa, BD e IA. Programación con restricciones (constraint solving). Lenguajes Multiparadigma p.31/40

Integración de Paradigmas Motivación: Objetivo Cada estilo tiene algo que ofrecer al otro: los lenguajes lógicos poseen la lógica de la unificación y de las variables lógicas. los lenguajes funcionales poseen la lógica de la igualdad y de las funciones. Objetivo: combinar las mejores características de los lenguajes lógicos y funcionales. Lenguajes Multiparadigma p.32/40

Integración de Paradigmas Motivación: Ventajas (esperadas) de los Lenguajes Lógico-Funcionales Potencia expresiva de un lenguaje lógico Eficiencia de un lenguaje funcional Aplicaciones de ambos campos Lenguajes Multiparadigma p.33/40

Integración de Paradigmas Motivación: Problemas con Prolog Evitar ciertas características impuras de Prolog: Indeterminismo incontrolado: ineficiencia y ramas infinitas. Control ad hoc: corte (rojo no declarativo). E/S no declarativa. Lenguajes Multiparadigma p.34/40

Integración de Paradigmas Motivación: Problemas con Prolog La integración de funciones produce: Indeterminismo incontrolado: ineficiencia y ramas infinitas. Control ad hoc: corte (rojo no declarativo). E/S no declarativa. Lenguajes Multiparadigma p.34/40

Integración de Paradigmas Motivación: Problemas con Prolog La integración de funciones produce: Mejor eficiencia: determinismo. Control ad hoc: corte (rojo no declarativo). E/S no declarativa. Lenguajes Multiparadigma p.34/40

Integración de Paradigmas Motivación: Problemas con Prolog La integración de funciones produce: Mejor eficiencia: determinismo. Control automático: corte dinámico (declarativo). E/S no declarativa. Lenguajes Multiparadigma p.34/40

Integración de Paradigmas Motivación: Problemas con Prolog La integración de funciones produce: Mejor eficiencia: determinismo. Control automático: corte dinámico (declarativo). E/S declarativa. Lenguajes Multiparadigma p.34/40

Integración de Paradigmas Aproximaciones a la Integración: funcional + lógico Sintaxis funcional: ecuaciones (condicionales?) s = t s 1 = t 1... s n = t n Los predicados son funciones booleanas. Las fórmulas atómicas son ecuaciones A = true. Lenguajes Multiparadigma p.35/40

Integración de Paradigmas Aproximaciones a la Integración: funcional + lógico Objetivo: Añadir variables lógicas y no determinismo a un lenguaje funcional Semánticas operacionales: Narrowing = reducción + unificación. Residuación = reducción + espera hasta que las funciones esten suficientemente instanciadas. Lenguajes Multiparadigma p.36/40

Integración de Paradigmas Aproximaciones a la Integración: lógico + funcional Sintaxis lógica con características funcionales: Cláusulas de Horn con igualdad A s 1 = t 1... s n = t n B 1... B n s = t s 1 = t 1... s n = t n B 1... B n Lenguajes Multiparadigma p.37/40

Integración de Paradigmas Aproximaciones a la Integración: lógico + funcional Objetivo: Añadir igualdad a un lenguaje lógico, Funciones definidas, Tipos de Datos. Semánticas operacionales: Flattening = desanidar funciones + SLD. Resolución SLDE = SLD + E-unificación. Resolución SLD + nuevas reglas para las funciones (Residuación o narrowing). Lenguajes Multiparadigma p.38/40

Integración de Paradigmas Lenguajes Mecanismo Operacional Narrowing (reescritura con unificación) Flattening (Traducción a Prolog) SLDE-resolución (resolución con unificación semántica) Residuación (Resolución con congelación de ecuaciones y reescritura) Weakly needed narrowing (Weakly) Needed narrowing + Residuación Lenguajes ALF, BABEL, SLOG K-LEAF, EUROPA LPG ESCHER, Le Fun, Oz T OY Curry Lenguajes Multiparadigma p.39/40

Integración de Paradigmas Bibliografía Hanus M., 1994. The Integration of Functions into Logic Programming: From Theory to Practice. Journal of Logic Programming, 19&20:583 628. Moreno Navarro J.J., 1995. Programación Lógica y Programación funcional. En Estudios sobre la programación Lógica y sus aplicaciones, Universidad de Santiago de Compostela, pp. 35 77. Lenguajes Multiparadigma p.40/40